✏️ 문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
✏️ code
📌 경우의 수 공식: n! / (n-m)! * m!
balls와 share이 30까지 갈 수 있는 상황에서 30!은 Integer의 범위를 뛰어넘는 큰 수가 됩니다.
따라서 다음과 같이 식을 풀어 분할 계산하였습니다.
📌result *= (balls - i); result /= (i+1);
C(5, 3) = 5! / 3!*2!
= 5*4*3! / 3!*2*1
= 5*4 / 2*1
분자는 balls부터 -i까지 곱하고, 분모는 1부터 share까지 나누면 원하는 result를 얻을 수 있습니다.
class Solution {
public int solution(int balls, int share) {
if (balls == share) {
return 1;
}
long result = 1;
for (int i = 0; i < share; i++) {
result *= (balls - i);
result /= (i + 1);
}
return (int) result;
}
}
반응형