이건 단순한 조합 계산 문제였다 조합 공식으로 직접 계산하면 숫자가 커져서 오버플로우가 날 수 있다. 그래서 곱셈과 나눗셈을 번갈아가며 계산하는 방식으로 처리했다. Java에서는 long 타입으로 처리한 뒤, 마지막에 int로 형 변환하면 된다.

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; 
    }
}

조합 계산은 무작정 팩토리얼로만 접근하면 오버플로우가 생기기 쉬운 것 같다. 이 문제처럼 최적화된 계산 방식이 있다는 걸 다시 한 번 상기했다. 문제 자체는 간단했지만, 효율적인 계산을 연습할 수 있는 좋은 예제였다.