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

성배·2025년 1월 12일
0

코딩테스트

목록 보기
16/53

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

생각한 풀이
1. 순서없이 balls에서 share개 만큼 뽑는 경우의 수 구하면 끝


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

🐴 풀이
1. long 타입으로 answer를 만든다
2. i=0부터 share까지 곱해주고, 분모는 (i+1)로 나눈다
3. long타입으로 받은 answer를 int로 변형해 출력


아래는 내가 처음 작성한 코드인데 왜 안돌아가는지 잘모르겠다

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

타입 문제인가?


for문 내부에서 곱셈 연산시 long 타입을 벗어나서 오류가 났다. for문 하나로 분모 분자 연산을 한번에 하면 해결(25.01.18)

Today's Quote

磨斧作針(마부작침)

0개의 댓글