코딩테스트/Programmers_LV0
Programmers_JAVA_구슬을 나누는 경우의 수
wn1331
2022. 11. 23. 17:56
반응형
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 1 ≤ balls ≤ 30
- 1 ≤ share ≤ 30
- 구슬을 고르는 순서는 고려하지 않습니다.
- share ≤ balls
1번째 시도 - factorial 함수를 따로 구현하여 solution에서 불러오는 형식 -> 오버플로우로 에러
2번째 시도 - 한 개의 for문으로 분모하나 분자하나 연산하고 share개수만큼 i차감후 곱셈. -> 소수점 자리 짤림
3번째 시도 - double 형식으로 형변환 후 똑같이 수행 -> 소수점 자리 짤림
4번째 시도 - for문 2개로 분할 -> 성공
class Solution {
public int solution(int balls, int share) {
double ball = (double)balls;
double shar = (double)share;
double answer = 1;
//서로다른 구슬 M개 중 N개를 고르는 경우의 수 nCr
//n!/(r!*(n-r)!)
//테스트 케이스 오류 : int,long범위초과. factorial 함수를 사용하면 오버플로우.
for(int i = 0;i<shar;i++) answer*=(ball-i);
for(int i = 0;i<shar;i++) answer/=(shar-i);
return (int)answer;
}
}
반응형