[문제 설명]
- 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
- 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
- 단, 금액이 부족하지 않으면 0을 return 하세요.
[나의 답안]
def solution(price, money, count):
fee = price * count * (count + 1) / 2
answer = 0 if money > fee else fee-money
return answer
등차수열임을 파악하고, for 문을 돌면서 sum을 구하는 것 보다 훨씬 빠르기 때문에 일반식을 사용하여 문제를 해결하였다.
※회고
1. 등차 수열의 합 공식에 의해 나오는 값 n(n+1)/2 는 항상 자연수 이므로, ' / ' 기호 대신 몫을 구하는 '//'를 구해서 data type 에도 신경써야 한다.
2. 가진돈이 요금보다 작게 나오면 0이 return 하면 되는 점을 이용하여,
max(0, price * count * (count + 1) // 2 - money)를 사용하는 편이 숏코딩에는 좋지만,
가독성 면에서 내 코드가 조금 더 좋지 않을 까 생각해본다.
3. 등차수열이 아니라면, for문을 돌릴 때 파이썬 언어의 장점을 적극 활용할 예정이다.
sum([price * i for i in range(1, count + 1)])
== price * count * (count + 1) / 2
볼 때 마다 숏코딩은 멋진 것 같다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 7주차(python) (0) | 2021.09.18 |
---|---|
[프로그래머스] 위클리 챌린지 6주차 : 복서 정렬하기(python) (0) | 2021.09.16 |
[프로그래머스] 위클리 챌린지 5주차 : 모음사전(python) (0) | 2021.09.15 |
[프로그래머스] 위클리 챌린지 4주차 : 직업군 추천하기(python) (0) | 2021.09.14 |
[프로그래머스] 위클리 챌린지 2주차 : 상호평가(python) (0) | 2021.09.13 |