728x90
문제 설명
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다. 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요. 단, 금액이 부족하지 않으면 0을 return 하세요. [제한사항]
|
처음 문제를 보고 for문과 if문을 꼭 써야겠구나 라는 생각을 했다.
실제로 내야 하는 금액을 계산하기 위해 for 문을 사용했다.
이용료가 이용 횟수에 따라 증가하기 때문에 이용 횟수*금액의 합을 구했다.
ex)
price | money | count | result |
3 | 20 | 4 | 10 |
총 4번 이용했으니까 실제 내야 하는 금액의 총합은
1*3 + 2*3+ 3*3 + 4*3 = 30
금액이 부족할 때는 얼마가 부족한지 result값으로 나와야 한다.
부족한 금액은 실제 내야 하는 금액 - 가진 금액
부족하지 않다면 0을 반환한다.
def solution(price, money, count):
total = 0
for i in range(1, count+1):
total += (i * price)
if money < total:
return total - money
else:
return 0
이렇게 열심히 고민해서 줄줄 썼지만 단 두줄로 풀 수도 있더라는...
return 값에 min, max 값을 사용해서 0과 계산 값 둘 중에 하나를 출력하는 법이 있었는데 코드가 너무 깔끔하고 좋아 보였다..
def solution(price, money, count):
return abs(min(money - sum([price*i for i in range(1,count+1)]),0))
abs()는 절대값을 구하는 함수이다.
abs(-1)
> 1
sum()은 리스트의 합을 구하는 함수이다.
[]안에 식을 넣고 실행해 보면 리스트 형식으로 모든 값들이 차곡차곡 저장된다는 것을 알 수 있다.
리스트의 합을 구하기위해 sum()을 사용하면 원하는 값을 얻을 수 있다!
[price*i for i in range(1,count+1)]
> [3, 6, 9, 12]
sum([price*i for i in range(1,count+1)])
> 30
'취업준비 > 코딩 테스트' 카테고리의 다른 글
자료구조 - 큐(QUEUE) (0) | 2021.10.30 |
---|---|
자료구조 - 배열(Array) (0) | 2021.10.29 |