빈 병 a개를 가져다주면 콜라 b병을 주는 마트가 있을 때, 빈 병 n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 기존 콜라 문제와 마찬가지로, 보유 중인 빈 병이 a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다. 상빈이는 열심히 고심했지만, 일반화된 콜라 문제의 답을 찾을 수 없었습니다. 상빈이를 도와, 일반화된 콜라 문제를 해결하는 프로그램을 만들어 주세요.
a | b | n | result |
---|---|---|---|
2 | 1 | 20 | 19 |
3 | 1 | 20 | 9 |
function solution(a, b, n) {
if (n < a) {
return 0;
}
// n = 총 빈병
// a = 몇 개줘야 b병 주는지
// b = a개 빈병 주면 b준다.
// 남은 빈 병의 개수 더하기
let result = b * ~~(n / a);
let rest = n % a;
return result + solution(a, b, result + rest);
}
이 문제는 'a' 개의 빈 콜라 병을 반환하면 'b' 개의 새 콜라 병을 받는 상황의 문제이다. 'n' 개의 빈 병으로 시작했을 때 얻을 수 있는 새 콜라의 수를 출력한다.
문제를 해결하기 위해 재귀 함수를 사용하였다.
이 재귀 함수는 처음에 받는 빈 병의 수를 'n'을 'a'로 나누어 계산한다. 이렇게 해서 얻은 콜라와 남은 빈 병을 합쳐 다시 함수에 넣어 계산을 반복한다.
이 과정은 더 이상 콜라를 받을 수 없을 때까지 재귀한다.
예를 들어, 2개의 빈 병을 주고 1개의 콜라를 받는 상황에서 20개의 빈 병으로 시작한다면,
총 얻을 수 있는 콜라 병의 수를 계산할 수 있다.
오늘부터 재귀를 학습을 시작하였기에 하나하나 log를 찍어보며 작성하느라 시간이 오래걸렸지만 아주 좋은 연습이 된거같다.