Today I Learned/Python 문제풀이

프로그래머스 lv1. 음양더하기 (zip 사용해서 간단하게)

하나719 2023. 8. 10. 18:20
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/76501

 

프로그래머스

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

programmers.co.kr

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() 함수를 알아보았다.

https://wikidocs.net/92539

 

07) zip과 딕셔너리

[TOC] ## 두 개의 리스트를 묶기 zip은 두 개의 리스트를 서로 묶어줄 때 사용합니다. ``` name = ['merona', 'gugucon'] price = …

wikidocs.net

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 같은 리스트를 따로 할당해줄 필요가 없었다.

반응형