본문 바로가기
Algorithm/Programmers

[Algorithm] 프로그래머스 - 부족한 금액 계산하기

by 홍월이_ 2022. 12. 28.

시작하며...

모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.

마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.

 

[Level 1] 부족한 금액 계산하기

 

프로그래머스

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

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는 자연수

입출력 예

입출력 예 설명

입출력 예 #1
이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.

 

My Solution

def solution(price, money, count):
    answer = price * sum(range(1, count+1)) - money
    return (answer if (answer >= 0) else 0)

놀이기구를 이용한 횟수에 따라 가격이 등차수열로 올라가는 문제이다.

입출력 예를 이용해 설명하면 3 + 6 + 9 + 12 와 3 * (1 + 2 + 3 + 4)는 같다는 것을 이용하여 문제를 풀이하였다.

  • 놀이기구를 이용한 횟수를 1회부터, 주어진 횟수 count까지 전부 더해준다 - sum(range(1, count+1))
  • 이용횟수의 합을 최초 금액 price와 곱하고 현재 가진 금액 money를 빼준다
    • 이용금액이 현재 가진 금액보다 높다면 answers 는 양수가 나오고 현재 가진 금액이 더 많다면 음수가 나온다
  • 리턴할 때 삼항연산자를 이용해 answers가 0보다 크거나 같다면 answer를, 그렇지 않다면 0을 리턴한다

 

More Solution

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

가져와본 다른 풀이법은 금액이 등차수열로 커진다는 것을 이용하여 등차수열의 평균을 구하여 문제를 풀이하였다.

그렇게 구해진 금액의 차와 0 중에 큰것을 비교하여 리턴함으로써 음수인지 양수인지 판단하였다.

댓글