구슬을 나누는 경우의 수 Lv. 0

박영준·2023년 5월 8일
0

코딩테스트

목록 보기
67/300

문제 설명

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

class Solution {
    public int solution(int balls, int share) {
        int answer = 0;
        return answer;
    }
}

제한 사항

  • 1 ≤ balls ≤ 30
  • 1 ≤ share ≤ 30
  • 구슬을 고르는 순서는 고려하지 않습니다.
  • share ≤ balls

입출력 예

입출력 예 설명


해결법

방법 1

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;
        } else {
        	return combination((balls - 1), (share - 1)) + combination(balls - 1, share);
        }
    }
}
  • combination 함수 (조합)
    • n 개의 숫자 중에서 r 개의 수를 순서 없이 뽑는 경우
    • [1, 2, 3] 이란 숫자 배열에서 2개의 수를 순서 없이 뽑으면, [1, 2], [1, 3], [2, 3]
      중복은 제거된다.
  • 3개의 구슬(1, 2, 3) 중 2개를 뽑는다고 가정하면, 3C2 = 2C2 + 2C1 이다.

    • 1, 2, 3 중 1을 뽑지 않는 경우에는 2, 3을 모두 뽑아야 하므로 => 2C2
    • 1, 2, 3 중 1을 뽑은 경우에는 2, 3 중 1개를 뽑아야 하므로 => 2C1

구슬을 나누는 경우의 수

profile
개발자로 거듭나기!

0개의 댓글