반응형
https://school.programmers.co.kr/learn/courses/30/lessons/76501
signs값이 false인 경우 - true 인 경우 +로 absolutes의 값을 다 더해서 result로 넘겨주는 문제!
1차 문제풀이
def solution(absolutes, signs):
answer = []
for i,v in enumerate(signs):
# True 일때 absolutes 의 해당 인덱스 값을 그대로 answer에 붙여줌
if v:
answer.append(absolutes[i])
# False 일때 absolutes 의 해당 인덱스 값에 -1 를 곱해서 음수로 변환해서 answer에 붙여줌
else:
answer.append(absolutes[i] * -1 )
return sum(answer)
문제풀이 후 다른사람 풀이에서 zip() 함수를 사용해서 아주 간단하게 풀이한 사람을 보고 zip() 함수를 알아보았다.
zip은 지퍼처럼 서로 다른 두개의 리스트를 묶어줄때 사용할 수 있다.
a =[1,2,3]
b=['a','b','c']
print(list(zip(a,b)))
결과 >> [(1,'a'), (2,'b'), (3,'c')]
이 함수는 for문과 함께 사용하면 매우 유용하게 사용할 수 있는데,
for문을 두번 돌리지않고 한번 돌리면서 두 리스트의 값을 모두 활용할 수 있다.
name = ['merona', 'gugucon']
price = [500, 1000]
for n, p in zip(name, price):
print(n, p)
결과 >>
'merona' 500
'gugucon' 1000
이 zip() 함수를 활용해서 원래 문제를 다시 풀어보자!
2차 문제풀이 (zip ()활용)
def solution(absolutes, signs):
answer = []
for a,s in zip(absolutes, signs):
if signs:
answer.append(a)
else:
answer.append(a * -1 )
sum(answer)
첫번째 풀이에서는 signs 리스트를 돌면서 enumerate으로 index값을 활용해서 absolutes 리스트에 접근해 값을 구했는데, zip 함수를 이용해서 한 for문안에서 absolutes, signs 리스트의 값을 각각 그대로 이용할 수 있었다.
이제 list comprehension을 사용해서 더 간결하게 줄여보자
3차 문제풀이 (zip() + list comprehension)
def solution(absolutes, signs):
return sum(a if s else a*-1 for a,s in zip(absolutes,signs))
2차 풀이에 있던 코드를 그대로 리스트컴프리헨션으로 구현했다. 안에 로직 그대로 리스트로 만들어주니 answer 같은 리스트를 따로 할당해줄 필요가 없었다.
반응형
'Today I Learned > Python 문제풀이' 카테고리의 다른 글
프로그래머스 lv2. 기능개발 (스택/큐로 풀기) (2) | 2023.09.06 |
---|---|
프로그래머스 lv1. 없는 숫자 더하기 (set 사용) (0) | 2023.08.11 |
[프로그래머스] lv0. 더크게 합치기 (0) | 2023.06.09 |
[프로그래머스] lv2. 프린터 (0) | 2020.11.16 |
[프로그래머스] Lv1. 완주하지 못한 선수 (0) | 2020.11.06 |