데이터분석 기록일지

문제풀이/프로그래머스

[프로그래머스 Lv.1] 음양 더하기 (Python)

야하루 2024. 7. 9. 16:17

코딩테스트 연습 - 음양 더하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

 

 

제한 사항

absolutes의 길이는 1 이상 1,000 이하입니다.
absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
signs의 길이는 absolutes의 길이와 같습니다.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

 

 

입출력 예
absolutes signs result
[4, 7, 12] [True,False,True] 9
[1, 2, 3] [False,False,True] 0

 

 

 


풀이

 

아이디어:  signs 요소의 값이 True인지 False인지 조건문으로 구분하고, 그에 따라 absolutes의 같은 인덱스 값에 알맞은 부호 붙이기

 

# 1
def solution(absolutes, signs):
    for i in range(len(signs)):
        if signs[i] == True:
            absolutes[i] = absolutes[i]
        else:
            absolutes[i] = -absolutes[i]
    return sum(absolutes)

-> range(len(signs))로 i의 범위를 signs 길이로 지정해 주고, signs 요소 하나하나에 접근하여 True인지 False인지 구분한다.

True면 해당 인덱스 번호의  absolutes 값을 양수로 만든다. 양수 이므로, 요소의 값 그대로 두고

False면 absolutes 값 앞에 - 를 붙여주고, absolutes를 모두 더한다.

 

 

# 2
def solution(absolutes, signs):
    answer = 0
    for i, j in zip(absolutes,signs):
        if j:
            answer += i
        else:
            answer -= i
    return answer

-> 이번에는 zip() 함수를 이용해서 각각의 원소를 쌍으로 묶어 풀어보았다.

또한 그냥 if j 라는 조건문을 사용했는데, j가 True 혹은 False이므로 굳이 다른 조건을 두지 않더라도 알아서 if else문으로 나눠져서 들어갈 수 있다.

 

 

zip()
zip() 함수는 이터러블 객체를 인자로 받아,
각 객체가 담고 있는 원소를 차례대로 엮어서 튜플의 형태로 반환해준다.
이터레이터 형태로 반환되므로, list, tuple, dict 등의 함수를 사용해 주어야한다.

ex)
numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
print(pair)

# 출력 : 
(1, 'A') (2, 'B') (3, 'C')