코딩테스트/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;
    }
    	
}

 

 

반응형