(문제)




(논평)
– 문제를 보고 저것을 재귀 사용나는 내가 해야 할 일을 느꼈다.
– 재귀함수는 아직 공부를 안해봤는데… 한동안 코드를 짜다가 다음과 같이 해결했습니다.
실제로 재귀 함수를 반드시 사용할 필요는 없습니다. 루프를 사용할 수도 있습니다.
class Solution {
public int solution(int a, int b, int n) {
// a : 마트에 주어야 하는 병 수
// b : 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수
// n : 상빈이가 가지고 있는 빈 병의 개수
int answer = this.howBottle(a, b, n, 0);
return answer;
}
private int howBottle(int a, int b, int n, int count) {
// 받을 수 있는 콜라 개수
int mock = (n / a);
int howMany = b * mock;
// 지금까지 받은 콜라 개수
count = howMany;
// 마트에 주어야 하는 병 수 = 상빈이가 가지고 있는 빈 병의 개수
int next = howMany + (n % a);
if(mock >= 1) {
return count + howBottle(a, b, next, count);
// 내가 현재 함수 호출에서 받은
} else {
return count;
}
}
}
– 변수 선언을 좀 더 짧게 할 수 있었는데 재귀함수를 처음 사용한 기념으로 그대로 두었습니다.

– 다른 사람의 재귀 함수 해결
class Solution {
public int solution(int a, int b, int n) {
return recursive(a, b, n, 0);
}
public int recursive(int a, int b, int n, int result) {
if (n < a) {
return result;
}
int change = (n / a) * b;
n = (n % a) + change;
return recursive(a, b, n, result + change);
}
}
cf) 재귀 함수에 대해서는 아래 글을 참조하세요.
(JAVA) 재귀함수 개념 및 예제
안녕하세요 최근에 알고리즘을 공부하다가 재귀함수를 적용해서 해결한 문제가 있었습니다.
crazykim2.tistory.com
