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