codekata

[프로그래머스] #26 음양 더하기 (zip 함수)

kinggoddino 2024. 7. 23.

▶ 문제

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

 

▶ 제한사항

absolutes의 길이는 1이상 1,000 이하

absolutes의 모든 수는 각각 1이상 1,000 이하

signs의 길이는 absolutes의 길이와 같다

signs[i]가 참이면 absolutes[i]의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미함

 

▶ 풀이

def solution(absolutes, signs):
    total = 0
    for i in range(len(signs)):
        if signs[i]:
            total += absolutes[i]
        else:
            total -= absolutes[i]
    return total

통과!

 

 

다른 사람 풀이에서 zip 함수라는 걸 발견했다.

zip() 함수 찾아보기

 

zip() 함수는 여러개의 iterable 객체들을 동시에 순회할 수 있게 해준다

absolutes = [4, 7, 12]
signs = [True, False, True]

print(list(zip(absolutes, signs)))
# [(4, True), (7, False), (12, True)]

이렇게 두 개의 리스트를 튜플 형태로 묶어줌!!

 

그럼 zip을 사용해서 다시 순회를 해보면,

def solution(absolutes, signs):
    total = 0
    for absolute, sign in zip(absolutes, signs):
        if sign:
            total += absolute
        else:
            total -= absolute
    return total

 

이걸 한줄로 표현해보기!

def solution(absolutes, signs):
    return sum(absolute if sign else -absolute for absolute, sign in zip(absolutes, signs))