PROGRAMMERS level1 부족한 금액 계산하기

🔗 출처

프로그래머스 level1 : 부족한 금액 계산하기

📄 문제

📝 나의 코드 (수정 전)

def solution(price, money, count):
    price *= (count + 1) * count / 2
    return price - money if price > money else 0

❓ 고민

for문에서 list의 각 요소에 접근해 배열의 길이와 인덱스를 사용하지 않는 방법은 없을까?

for sign in signs:

또는

for absolute in absolutes:

를 사용할 수 있지만, 이렇게 되면 둘 중 하나의 요소에만 접근할 수 있다.

🛠 해결책

얼마 전 수업에서 배웠던 zip() 함수가 떠올랐다.
zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고있는 원소를 tuple의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다.

 numbers = [1,2,3]
 letters = ["a","b","c"]
 for pair in zip(numbers, letters):
 	print(pair)
    
#(1, 'a')
#(2, 'b')
#(3, 'c')

참고로 리스트 앞에 풀기(unpacking) 연산자를 붙여 zip() 함수에 넘기면 unzip 즉, 해체가 된다. 이 과정을 통해 다시 원래 2개의 tuple을 얻을 수 있다.

numbers, letters = zip(*pairs)
print(numbers) #(1,2,3)
print(letters) #('a','b','c')

📝 나의 코드 (수정 후_미완성)

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

💡 나의 코드 (최종)

생각해보니 if-else문을 1줄에 정리하면 식이 더 깔끔할 것 같았다.

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

❗️ 깨달음

if-else문이 나오면 한 줄에 정리할 수 있는지 생각해보기 :)

좋은 웹페이지 즐겨찾기