목차
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 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로 반환.
- 로직:
- factorial(n)으로 n!을 계산.
- factorial(r)과 factorial(n - r)로 분모를 계산.
- 위 값을 나눠 조합 결과를 반환.
- 공식:
(2) factorial 메서드
- 역할: 주어진 숫자의 팩토리얼 값을 계산.
- 매개변수:
- num: 팩토리얼을 계산할 숫자.
- 반환값: 계산된 팩토리얼 값을 BigInteger로 반환.
- 로직:
- 팩토리얼 초기값을 1로 설정.
- 2부터 num까지 반복하며 곱셈 수행.
- 최종 결과를 반환.
2. Solution 클래스
(1) solution 메서드
- 역할: CombinationCalculator를 이용해 주어진 공의 수와 나눌 공의 수에 대해 조합 값을 계산.
- 매개변수:
- balls: 전체 공의 개수 (n).
- share: 나눌 공의 개수 (r).
- 반환값: 조합 결과를 int로 반환.
- 로직:
- CombinationCalculator 객체를 생성.
- combination 메서드를 호출하여 조합 결과를 얻음.
- 결과를 BigInteger에서 int로 변환해 반환.
728x90
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스, LV.0] 캐릭터의 좌표 (0) | 2024.12.12 |
---|---|
[프로그래머스, LV.0] 외계어 사전 (0) | 2024.12.12 |
[프로그래머스, LV.0] 삼각형의 완성조건 (2) (0) | 2024.12.12 |
[프로그래머스, LV.0] 영어가 싫어요 (0) | 2024.12.11 |
[프로그래머스, LV.0] 문자열 계산하기 (0) | 2024.12.11 |