#21 프로그래머 – 재귀 함수가 있는 콜라 문제(레벨 1)

(문제)


출처: 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.591

(JAVA) 재귀함수 개념 및 예제

안녕하세요 최근에 알고리즘을 공부하다가 재귀함수를 적용해서 해결한 문제가 있었습니다.

crazykim2.tistory.com