문제 확인하기
나의 풀이
- a개의 콜라를 제출해서 1개의 콜라를 받는다고 가정하면, N개의 콜라는 Q 번 교환하는데 사용된 콜라와, 교환에 활용되지 못한 R 개의 콜라로 표현할 수 있다.
- Q번의 교환을 통해 얻을 수 있는 콜라의 개수는 콜라 교환비 값인 b를 곱해주면 된다.
# 몫 : 새로 받을 콜라 개수, 나머지 : 남은 콜라 개수
def solution(a, b, n):
answer = 0
# 교환 가능할 때 까지 실행
while n >= a:
q, r = divmod(n, a)
# 교환 비가 1보다 큰 경우
q *= b
# 받은 콜라 개수 추가
answer += q
# 현재 콜라 개수 갱신
n = q + r
return answer
다른 사람 풀이
- a개의 콜라를 제출해서 b개의 콜라를 받는 과정은 a - b로 나타낼 수 있다.
- 조건에 따라 a는 항상 b 보다 크기 때문에 마지막 a - b 실행 때는 콜라를 되돌려 받지 못한다.
- 따라서 n에서 b를 뺀 값을 a - b로 나눈 몫이 곧 교환 횟수를 나타내게 된다.
- 마지막에 b를 곱해서 교환비를 맞춰준다.
solution = lambda a, b, n: max(n - b, 0) // (a - b) * b