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
반응형