55. 모스부호(1) ⭐️⭐️

56. 가위 바위 보 

class Solution {
    public String solution(String rsp) {
        String answer = "";
        String[] arr = rsp.split("");
        for(int i=0;i < arr.length; i++) {
            if(arr[i].equals("2")) answer += "0";
            else if(arr[i].equals("0")) answer += "5";
            else answer += "2";
        }

        return answer;
    }
}

57. 구슬을 나누는 경우의 수 ⭐️⭐️⭐️

🧐 서로 다른 n개중 m개를 뽑는 경우의 수  = nCm = n! / [m!(n-m)!] ,
n!은 1부터 n까지의 모든 정수의 곱 (순열과 조합), 순서를 고려한 경우

cf. 순서를 고려하지 않은 경우 : nPm = n!/m!

class Solution {
    public long solution(int balls, int share) {
        share = Math.min(balls - share, share);

        if (share == 0)
            return 1;

        long result = solution(balls - 1, share - 1);
        result *= balls;
        result /= share;

        return result;
    }
}

https://copro505.tistory.com/entry/%EA%B5%AC%EC%8A%AC%EC%9D%84-%EB%82%98%EB%88%84%EB%8A%94-%EA%B2%BD%EC%9A%B0%EC%9D%98-%EC%88%98

import java.lang.*;
import java.math.*;
class Solution {
    public BigInteger solution(int balls, int share) {
        BigInteger n = BigInteger.ONE, m = BigInteger.ONE;
        long select1 = balls-share > share ? balls-share : share;
        long select2 = balls-share > share? share : balls-share;
        for(long i = select1+1; i <= balls; i++)
            n = n.multiply(BigInteger.valueOf(i));
        for(long i = 2L; i <= select2; i++)
            m = m.multiply(BigInteger.valueOf(i));
        return n.divide(m);
    }
}
public class Solution {
    public long solution(int balls, int share) {
        return combination(balls, share);
    }

    private long combination(int n, int r) {
        if (r == 0 || n == r) return 1;

        return combination(n - 1, r - 1) + combination(n - 1, r);
    }
}

// 재귀를 이용한 조합의 계산 방법
// 조합 nCr은 n-1Cr-1과 n-1Cr의 합과 동일하며, 이를 이용하여 재귀적으로 계산. 
// 재귀의 기저 조건으로는 r이 0이거나 n이 r과 같은 경우
// (즉, 모든 것을 선택하거나 아무 것도 선택하지 않는 경우) 경우의 수가 1가지이므로 1을 반환.

 

'Algorithm' 카테고리의 다른 글

프로그래머스 Lv.0  (0) 2023.06.10
프로그래머스 Lv.0  (0) 2023.06.09
프로그래머스 Lv.0  (2) 2023.05.30
프로그래머스 Lv.0  (0) 2023.05.27
프로그래머스 Lv.0  (0) 2023.05.25