Coding Test/프로그래머스

[프로그래머스] 위클리 챌린지 1주차 : 부족한 금액 계산하기(python)

hzoooo 2021. 9. 13. 20:30

[문제 설명]

- 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 놀이기구의 원래 이용료는 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 

 

 

볼 때 마다 숏코딩은 멋진 것 같다.