코린이의 소소한 공부노트

[프로그래머스/Lv.1] 숫자 짝꿍 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.1] 숫자 짝꿍

무지맘 2023. 7. 4. 11:57

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 k 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 한다(, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용한다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1이고, X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0이다.

 

1. Input, Output, Example

- X, Y의 짝꿍을 문자열로 반환

 

2. Constraint

1) 3 X, Y의 길이(자릿수) 3,000,000

2) X, Y0으로 시작하지 않는다.

 

3. Code

1) 첫 코드

class Solution {
    public String solution(String X, String Y) {
        int[] x = new int[10], y = new int[10];
        for(int i=0 ; i<X.length() ; i++)
            x[X.charAt(i)-'0']++;
        for(int i=0 ; i<Y.length() ; i++)
            y[Y.charAt(i)-'0']++;
        String answer = "";
        for(int i=9 ; i>=1 ; i--)
            answer = answer.concat(String.valueOf(i).repeat(Math.min(x[i],y[i])));
        if(answer.length()>0)
            answer = answer.concat(String.valueOf(0).repeat(Math.min(x[0],y[0])));
        else if(Math.min(x[0],y[0])>0)
            answer = "0";
        else
            answer = "-1";
        return answer;
    }
}

- +3

 

2) StringBuilder를 이용한 코드

class Solution {
    public String solution(String X, String Y) {
        int[] x = new int[10], y = new int[10];
        int xi = 0, yi = 0;
        while(xi<X.length() || yi<Y.length()){
            if(xi<X.length())
                x[X.charAt(xi++)-'0']++;
            if(yi<Y.length())
                y[Y.charAt(yi++)-'0']++;
        }
        StringBuilder sb = new StringBuilder();
        for(int i=9 ; i>=1 ; i--)
            sb.append(String.valueOf(i).repeat(Math.min(x[i],y[i])));
        if(sb.length()>0)
            sb.append(String.valueOf(0).repeat(Math.min(x[0],y[0])));
        else if(Math.min(x[0],y[0])>0)
            sb.append("0");
        else
            sb.append("-1");
        return sb.toString();
    }
}

- 1번 코드에서 많은 시간이 걸리던 것은 2번이 훨씬 빨랐고, 나머지는 비슷했다.