IT/Programmers
[Programmers/코딩테스트 연습] 가위바위보, 조합(순서 없는 경우의 수) Java (stream, map, Colloctors, nCr) *****
안선생 Dr.Ahn
2022. 12. 6. 22:52
728x90
반응형
가위바위보 (Java)
class Solution {
public String solution(String rsp) {
String answer = "";
String[] rspA = rsp.split("");
for (int i = 0; i < rspA.length; i++) {
switch(rspA[i]) {
case "0": answer += "5"; break;
case "2": answer += "0"; break;
case "5": answer += "2"; break;
}
}
return answer;
}
}
뭔가 stream.... mapping...그런 걸 쓰고 싶었는데 나는 아직 하수라서 이런 허접한 코드로 제출을 했다.
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(String rsp) {
return Arrays.stream(rsp.split(""))
.map(s -> s.equals("2") ? "0" : s.equals("0") ? "5" : "2")
.collect(Collectors.joining());
}
}
이게 내가 원한 뭔가 좀 있어보이는 코드...
Arrays.stream(rsp.split("")) : rsp를 한 글자씩 나눠서 배열로 저장한다.
map(s -> s.equals("2") ? "0" : s.equals("0") ? "5" : "2" ) : 아.. 이게 s가 각 원소고, 한 원소씩 -> 매핑하는거구나
collect(Collectors.joining()) : 각 요소를 한번에 이어붙이는 것!
구슬
nCr 조합 Combination
factorial로 고생
public int factorial(int n) {
int result = 0;
while(n > 0) {
result = n * factorial(n-1);
}
return result;
}
시간초과 failed
class Solution {
public int solution(int balls, int share) {
int answer = 0;
answer = fact(balls)/(fact(balls-share) * fact(share));
return answer;
}
public int fact(int n) {
int result = n;
for(int i = 1; i < n; i++) {
result *= i;
}
return result;
}
}
런타임에러 failed
class Solution {
public int solution(int balls, int share) {
int answer = 0;
answer = comb(balls, share);
return answer;
}
public int comb(int n, int r) {
if(n == r || r == 0) return 1;
return comb(n-1, r-1) + comb(n-1, r);
}
}
이산수학이 나를 살렸다...ㅋ
nCr = n-1Cr-1 + n-1Cr :
1) n개 중 1번째를 뽑는 경우 : 나머지 n-1개 중에서 r-1개를 뽑아야 한다.
2) n개 중 1번째를 뽑지 않는 경우: 나머지 n-1개 중에서 r개를 뽑아야 한다.
결국 재귀...
#순서없는 #경우의수 #조합 #nCr
수학과 헛나온듯
728x90
반응형