Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: 숫자 짝꿍 본문

Java

프로그래머스: 숫자 짝꿍

Daeryuk Kim 2024. 1. 20. 14:32

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        int[] x = {0,0,0,0,0,0,0,0,0,0}; //10자리 수
        int[] y = {0,0,0,0,0,0,0,0,0,0};
        
        // 각 숫자 문자열(X와 Y)의 빈도수를 계산하여 x와 y 배열에 저장함
        for(int i=0; i<X.length();i++){
           x[X.charAt(i)-48] += 1;
        }
        for(int i=0; i<Y.length();i++){
           y[Y.charAt(i)-48] += 1;
        }
        
        // 두 숫자에 공통으로 나타나는 가장 큰 수를 찾기 위해 각 숫자의 빈도수를 비교하면서, 
        // 빈도수가 더 작은 쪽을 기준으로 해당 숫자를 answer에 추가합니다.
        /*
        X: "12321"
        Y: "42531" 일 때
        
        {0, 2, 2, 1, 0, 0, 0, 0, 0, 0}
        {0, 1, 1, 1, 1, 1, 0, 0, 0, 0}
        */
        
        for(int i=9; i >= 0; i--){
            for(int j=0; j<Math.min(x[i],y[i]); j++){
                // min은 1, 1, 1이기 때문이다. 
                answer.append(i); // 3 들어감, 2 들어감, 1들어감
            }
        }
        /*
        만약 answer가 빈 문자열이면, 두 숫자에 공통된 숫자가 없다는 것이므로 -1을 반환합니다.
        그렇지 않고, answer의 첫 번째 문자가 '0'이라면 결과는 0이 되어야 하므로 "0"을 반환합니다.
        그렇지 않으면 answer를 문자열로 변환하여 반환합니다.
        */
        if("".equals(answer.toString())){
           return "-1";
        }else if(answer.toString().charAt(0)==48){
           return "0";
        }else {
            return answer.toString();
        }
    }

    public static void main(String[] args) {
        
        String X = "12321";
        String Y = "42531";
        

        Solution sol = new Solution();
        String result = sol.solution(X, Y);
        System.out.println(result); 
    }
}

레벨 1 문제가 맞나싶다. 약간 버거운 느낌이 든다.

단순히 빈도수를 찾아서 거꾸로 검사해서 큰 수를 문자열의 형태로 저장하는 것이다.