Recent Posts
Recent Comments
라떼는말이야
[프로그래머스 lv1] 음양 더하기 (파이썬) 본문
반응형
월간 코드 챌린지 시즌 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() 와 같이 뒤에서부터 차근히 해결해 나가면 좋다
반응형
'알고리즘 > 코딩 테스트' 카테고리의 다른 글
[프로그래머스 lv1] 가운데 글자 가져오기 (파이썬) (0) | 2021.06.24 |
---|---|
[프로그래머스 lv2] 다리를 지나는 트럭 (파이썬) (0) | 2021.06.24 |
[프로그래머스 lv2] 주식가격 (파이썬) (0) | 2021.06.24 |
[프로그래머스 lv1] 약수의 개수와 덧셈 (파이썬) (0) | 2021.06.23 |
[프로그래머스 lv2] 피보나치 수 (파이썬) (0) | 2021.06.23 |
[프로그래머스 lv2] 124나라의 숫자 (파이썬) (4) | 2021.06.23 |
[프로그래머스 lv2] 프린터 (파이썬) (0) | 2021.06.23 |
[프로그래머스 lv2] 기능개발 (파이썬) (0) | 2021.06.23 |
Comments