라떼는말이야

[프로그래머스 lv1] 음양 더하기 (파이썬) 본문

알고리즘/코딩 테스트

[프로그래머스 lv1] 음양 더하기 (파이썬)

MangBaam 2021. 6. 23. 09:00
반응형

월간 코드 챌린지 시즌 2 문제입니다.

문제 설명

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

 

제한사항

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

입출력 예

입출력 예

 

입출력 예 설명

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

 

 

 


나의 풀이

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

같은 크기를 가지는 두 개의 리스트를 같은 인덱스끼리 묶어서 푸는 문제에서는 zip()함수가 유용하게 사용된다.

zip(absolutes, signs)의 결과로 각 경우에서 절댓값과 부호가 튜플로 묶인다.

 

절댓값과 부호를 num, sign 변수에 언패킹해주고, 그 결과를 if문에 사용한다.

 

if 문에서는 sign이 True 이면 num을, sign이 False이면 -num을 반환하고, 그 값이 num 변수에 입력된다.

이 값들을 sum() 함수에 입력하면 답이 나온다.

[num if sign else -1 * num for num, sign in zip(absolutes, signs)] 와 같이 []에 묶여서 리스트로 표현한 뒤 sum 함수로 넣어주는 것이 정석이지만 sum 함수 내부에서 [] 없이도 합을 구해주기 때문에 []를 생략해도 결과가 똑같이 출력된다.

 

이처럼 한 줄로 문제를 푸는 것이 헷갈리면 zip() -> for -> if -> sum() 와 같이 뒤에서부터 차근히 해결해 나가면 좋다

 

반응형
Comments