흥미/코딩테스트
#21 😊 프로그래머스 - 콜라 문제(Level 1) with 재귀함수
RadderNepa
2023. 3. 16. 03:50
[문제]
[해설]
- 문제를 보고 이건 재귀함수를 이용해야하는걸 느꼈다.
- 아직 재귀함수를 공부하지 않았는데... 느낌상 요래저래 코드를 짜다보니 아래와 같이 풀었다.
- 사실 반드시 재귀함수를 이용할 필요는 없다. 반복문만 사용해도 된다.
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) 재귀함수는 아래 글을 참고했다.
https://crazykim2.tistory.com/591
[JAVA] 재귀함수(Recursion Function) 개념 및 예제
안녕하세요 최근에 알고리즘 공부를 하면서 재귀함수를 응용해서 풀은 문제가 있습니다 실제 회사에서 개발을 하면서 거의 써본적이 없는데 알고리즘을 풀다보면 종종 쓰일 것 같습니다 이번
crazykim2.tistory.com