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