
function solution(a, b, n) {
var answer = 0;
while(n >= a){
answer += Math.floor(n/a)*b
n = Math.floor(n / a) * b + (n % a)
}
return answer;
}
| 변수 | 설명 |
|---|---|
| a | 새로운 병 하나를 받기 위해 필요한 빈 병의 수 |
| b | 새로운 병 하나를 받으면 추가로 받는 병의 수 |
| n | 현재 가지고 있는 빈 병의 수 |
while(n >= a): n이 a보다 크거나 같을 때까지 반복 즉, 더 이상 병을 교환할 수 없을 때까지 반복
Math.floor(n/a) * b: 현재 가지고 있는 빈 병 n을 a로 나눈 몫을 계산하여, 새로운 병을 받을 수 있는 수량을 계산. 이때, 받은 병의 수를 b와 곱하여 더 많은 병을 받게 됨
answer += Math.floor(n/a)*b: 위에서 계산한 새로운 병의 수를 answer에 누적
n = Math.floor(n / a) * b + (n % a): 새로운 병을 받은 후 남은 빈 병의 수를 업데이트함 (n % a)는 교환 후 남는 빈 병의 수를 의미 즉, 새로 받은 병과 남은 병의 수를 합쳐서 n을 업데이트
solution = (a, b, n) => Math.floor(Math.max(n - b, 0) / (a - b)) * b