JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, LV.0] 구슬을 나누는 경우의

sundori 2024. 12. 12. 05:30

목차

    문제 설명

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


     

    제한사항

    • 1 ≤ balls ≤ 30
    • 1 ≤ share ≤ 30
    • 구슬을 고르는 순서는 고려하지 않습니다.
    • share ≤ balls
    balls share result
    3 2 3
    5 3 10
    import java.math.BigInteger;
    
    public class CombinationCalculator {
        /**
         * 조합을 계산하는 메서드
         * nCr = n! / (r! * (n-r)!)
         * @param n 전체 원소의 개수
         * @param r 선택할 원소의 개수
         * @return 조합의 결과를 BigInteger로 반환
         */
        public BigInteger combination(int n, int r) {
            // 조합 공식: n! / (r! * (n-r)!) 계산
            return factorial(n).divide(factorial(r).multiply(factorial(n - r)));
        }
    
        /**
         * 팩토리얼을 계산하는 메서드
         * @param num 팩토리얼을 계산할 숫자
         * @return 팩토리얼 결과를 BigInteger로 반환
         */
        private BigInteger factorial(int num) {
            BigInteger result = BigInteger.ONE; // 팩토리얼 결과 초기화
            for (int i = 2; i <= num; i++) { // 2부터 num까지 반복
                result = result.multiply(BigInteger.valueOf(i)); // 현재 숫자를 곱함
            }
            return result; // 최종 팩토리얼 값 반환
        }
    }
    
    class Solution {
        /**
         * 공의 개수와 나누는 개수를 받아 조합을 계산하는 메서드
         * @param balls 전체 공의 개수
         * @param share 나누는 공의 개수
         * @return 조합의 결과를 int로 반환
         */
        public int solution(int balls, int share) {
            CombinationCalculator calculator = new CombinationCalculator();
            return calculator.combination(balls, share).intValue(); // BigInteger 결과를 int로 변환
        }
    }

    1. CombinationCalculator 클래스

    (1) combination 메서드

    • 역할: nn개의 원소에서 rr개의 원소를 선택하는 조합의 수를 계산한다.
    • 매개변수:
      • n: 전체 원소의 개수
      • r: 선택할 원소의 개수
    • 반환값: 조합 결과를 BigInteger로 반환.
    • 로직:
      1. factorial(n)으로 n!을 계산.
      2. factorial(r)과 factorial(n - r)로 분모를 계산.
      3. 위 값을 나눠 조합 결과를 반환.
    • 공식:

    (2) factorial 메서드

    • 역할: 주어진 숫자의 팩토리얼 값을 계산.
    • 매개변수:
      • num: 팩토리얼을 계산할 숫자.
    • 반환값: 계산된 팩토리얼 값을 BigInteger로 반환.
    • 로직:
      1. 팩토리얼 초기값을 1로 설정.
      2. 2부터 num까지 반복하며 곱셈 수행.
      3. 최종 결과를 반환.

    2. Solution 클래스

    (1) solution 메서드

    • 역할: CombinationCalculator를 이용해 주어진 공의 수와 나눌 공의 수에 대해 조합 값을 계산.
    • 매개변수:
      • balls: 전체 공의 개수 (n).
      • share: 나눌 공의 개수 (r).
    • 반환값: 조합 결과를 int로 반환.
    • 로직:
      1. CombinationCalculator 객체를 생성.
      2. combination 메서드를 호출하여 조합 결과를 얻음.
      3. 결과를 BigInteger에서 int로 변환해 반환.
    728x90