흥미/코딩테스트

#21 😊 프로그래머스 - 콜라 문제(Level 1) with 재귀함수

RadderNepa 2023. 3. 16. 03:50

[문제]

출처 : https://school.programmers.co.kr
출처 : https://school.programmers.co.kr
출처 : https://school.programmers.co.kr
출처 : https://school.programmers.co.kr


[해설]

- 문제를 보고 이건 재귀함수를 이용해야하는걸 느꼈다.

- 아직 재귀함수를 공부하지 않았는데... 느낌상 요래저래 코드를 짜다보니 아래와 같이 풀었다.

- 사실 반드시 재귀함수를 이용할 필요는 없다. 반복문만 사용해도 된다.

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