구슬을 나누는 경우의 수

진기·2024년 4월 11일

문제

정답 코드

class Solution {
    public int solution(int balls, int share) {
        return combination(balls, share);
    }
    
    public static int combination(int balls, int share){
        if(balls == share || share == 0) 
            return 1;
        return combination((balls - 1), (share - 1)) + combination(balls - 1, share);
    }
}

리뷰

본 문제는 재귀 함수를 이용하여 문제를 해결해야 하는 문제였는데 생각보다 많이 까다로워서 구글링을 통해 로직을 참고하였다.


해당 식을 활용하여 재귀 함수를 통해 구현 하였다.

예를들어, 문제처럼 3개의 구슬(1, 2, 3) 중 2개를 뽑는다고 가정하면
3C2 = 2C2 + 2C1 이다.
1, 2, 3 중 1을 뽑지 않는 경우 2, 3을 모두 뽑아야 하므로 => 2C2
1, 2, 3 중 1을 뽑은 경우 2, 3 중 1개를 뽑아야 하므로 => 2C1

이렇게 수식을 이해하고나서 재귀함수를 구현 해보았다.

공의 개수와 뽑을 개수가 같거나 0개를 고르는 경우는 경우의 수가 1이므로 1을 반환하고 그 외에는 위의 식을 이용해 경우의 수를 반환하도록 한다.

profile
개발 성장 이야기

0개의 댓글