Coding Test/Programmers(프로그래머스)

[JAVA] 구슬을 나누는 경우의 수

공구일 2025. 4. 3. 05:15
728x90

🔍자바 : 코딩테스트 . 구슬을 나누는 경우의 수

 

01. 코드 기획 단계 

- 조합을 구하는 문제이기 때문에 2가지를 주의하려고 했는데 첫 번째가 변수들의 오버플로우와 팩토리얼을 사용하는 방식이었습니다. 최대 값이 30!이므로 모든 값을 직접 구해서 최종연산을 하면 long 타입에도 현실적으로 넣기가 벅찬 상황이었습니다.

-> 처음에는 up과 down으로 분모 분자를 나눠서 연산 후 최종 연산을 하려고 했지만 값을 끊어서 구하는 경우에는 무조건 오버플로우가 발생할 수 밖에 없다고 판단하여 값을 일일히 연산 후 넣어주는 방식을 선택하였습니다.


02. 코드 실행 및 오류 잡기

class Solution {
    public double solution(int balls, int share) {
        double answer = 1;
        
        for (int i = 0; i < share; i++) {
            answer = answer * (balls-i) / (i + 1);
        }
        
        return answer;
    }
}

- answer에 곱하는 값을 직접 곱해주는 것으로 해야지만 반례가 생기지 않습니다.

 

03. 정리 

- 처음에는 long타입을 이용하였지만 오버플로우가 발생하였고, long보다 더 넓은 범위를 나타내는 double형을 사용하였습니다.

 

- 값을 누적하여 곱해주는 식으로 값이 커지는 것을 방지하였습니다.

 

 

728x90