[TIL] 콜라문제

yeols·2023년 11월 15일
1

[TIL]

목록 보기
35/72

문제 설명

빈 병 a개를 가져다주면 콜라 b병을 주는 마트가 있을 때, 빈 병 n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 기존 콜라 문제와 마찬가지로, 보유 중인 빈 병이 a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다. 상빈이는 열심히 고심했지만, 일반화된 콜라 문제의 답을 찾을 수 없었습니다. 상빈이를 도와, 일반화된 콜라 문제를 해결하는 프로그램을 만들어 주세요.

입출력 예

abnresult
212019
31209

문제 풀이

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를 찍어보며 작성하느라 시간이 오래걸렸지만 아주 좋은 연습이 된거같다.

profile
흠..

0개의 댓글

관련 채용 정보