문제풀이/프로그래머스

[프로그래머스 Lv.1] 부족한 금액 계산하기 (Python)

야하루 2024. 7. 10. 21:28

코딩테스트 연습 - 부족한 금액 계산하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

문제

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

 

제한 사항


놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수

처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수

놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

 

입출력 예
price money count result
3 20 4 10

 

 

 


풀이

 

아이디어:  price에 1부터 count까지 곱한 값을 누적합하여 money와 비교한 뒤 차이를 출력한다.
def solution(price, money, count):
    fee = 0
    for i in range(1,count+1):
        fee += price*i
    if fee > money:
        return (fee-money)
    else:
        return 0

 

 

 

 


다른 방법의 풀이들

def solution(price, money, count):
    return max(0,price*(count+1)*count//2-money)

-> max()로 0과 (누적합 - money )를 비교하여 둘 중 큰 값이 나오게 된다. 만약 money가 더 크면 음수이므로 0이 나오게 되는 것

 

저 코드에서 price*(count+1)*count /2 는 등차수열의 합 공식을 이용한 것이다.

문제에서 주어진 예시의 누적합은 3,6,9,12 이므로 공차가 3인 등차수열을 만족한다.

등차수열의 합 공식은 첫 항과 마지막 항을 더한 뒤 항의 개수를 곱하고 2로 나눈 값이다. = (price+price*count)*count/2

저 공식에서 공통되는 price를 앞으로 뽑아온 것이다.

 

 

 

def solution(price, money, count):
    return max(price*sum(range(1,count+1))-money,0)

저 공식 대신에, 누적합이 결국 3*1 + 3*2 + 3*3 + 3*4 = 3*(1+2+3+4) 이므로

price*sum(range(1,count+1))

이렇게 풀어도 좋을 것 같다.

 

 

 

def solution(price, money, count):
    return max(sum([price*i for i in range(1,count+1)])-money,0)

또한 내가 처음에 푼 for 문을 리스트 컴프리헨션을 이용해서, 누적합을 구하는 방법으로 풀어도 좋아보인다.

 

 

 

 


 

기억 저편에 있던 수학 공식들을 꺼내 오는 문제와 풀이들이었다.