본문 바로가기
JAVA/프로그래머스

[Lv.0] 프로그래머스 - 구슬을 나누는 경우의 수 : Java

by ♡˖GYURI˖♡ 2024. 5. 10.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

 

문제 맨 밑에 이런 힌트가 있어서 팩토리얼을 구현해서 풀어야지! 했다가 실패했다.

왠지 모르겠어서 조합으로 풀려다가 또 실패...

질문하기 탭을 봤더니 더 쉬운 방법이 있어서 기록해둔다.

 

만약 공이 30개 있고, 그 중 5개를 뽑는다고 생각해보자.

위의 힌트에 적용시키면 30! / (25! x 5!) 이다.

다시 정리하면 (30 x 29 x 28 x 27 x 26) / (5 x 4 x 3 x 2 x 1) 이 된다.

 

이걸 가지고 다시 풀이하였다.

 

 

문제풀이

import java.util.*;

class Solution {
    public int solution(int balls, int share) {
        long answer = 1;
        
        int[] num1 = new int[share];
        int[] num2 = new int[share];
        
        int idx = 0;
        
        for (int i = balls; i > balls - share; i--) {
            num1[idx++] = i;
        }
        
        for (int i = 1; i <= share; i++) {
            num2[i - 1] = i;
        }
        
        for (int i = 0; i < num1.length; i++) {
            answer = answer * num1[i] / num2[i];
        }
        
        return Integer.parseInt(answer + "");
    }
}