[프로그래머스] Lv.0 구슬을 나누는 경우의 수.java

김엄지·2024년 4월 23일

알고리즘

목록 보기
58/90

🐤 목표

앞으로 매일 꾸준히 코딩테스트를 진행하면서 단계를 높여가보자.

문제 설명

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

제한사항

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

입출력의 예


문제 풀이

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);
    }
}

combination() 메서드는 재귀적으로 조합을 계산하는 함수이다. 이 함수는 다음과 같은 방식으로 동작한다.

조합을 구하는 경우의 수를 계산한다.

  1. 조건문으로 선택할 구슬의 개수가 0이거나 전체 구슬의 개수와 선택할 구슬의 개수가 같으면 1을 반환한다.

    • 이는 조합에서 선택할 구슬의 개수가 0인 경우 또는 전체 구슬의 개수와 선택할 구슬의 개수가 같은 경우는 항상 1가지 경우의 수가 있기 때문이다.
  2. 그 외의 경우에는 다음과 같이 조합을 구한다.

    • 현재 구슬을 선택하는 경우와 선택하지 않는 경우를 각각 재귀적으로 계산하여 합산한다.
    • 선택하는 경우는 구슬의 개수에서 1을 빼고, 선택할 구슬의 개수도 1을 뺀다.
    • 선택하지 않는 경우는 구슬의 개수에서 1을 빼고 선택할 구슬의 개수는 그대로 사용한다.

이렇게 하여 모든 가능한 조합의 수를 계산한다.


참고풀이
https://velog.io/@yuki-kim/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B5%AC%EC%8A%AC%EC%9D%84-%EB%82%98%EB%88%84%EB%8A%94-%EA%B2%BD%EC%9A%B0-Java

profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글