숫자 짝꿍(프로그래머스 연습문제)

권 해·2023년 2월 9일

Algorithm

목록 보기
9/49

문제

코드

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        
        int[] arrX=new int[10];
        int[] arrY=new int[10];
        
        for(int i=0;i<X.length();i++)
            arrX[Integer.parseInt(String.valueOf(X.charAt(i)))]++;
        for(int i=0;i<Y.length();i++)
            arrY[Integer.parseInt(String.valueOf(Y.charAt(i)))]++;
        
        for(int i=9;i>=0;i--){
            int count=Math.min(arrX[i],arrY[i]);
            for(int j=0;j<count;j++)
                answer.append(i);
        }
        if(answer.length()==0)
            return "-1";
        else if(answer.charAt(0)=='0')
            return "0";
        else
            return answer.toString();
    }
}

풀이

생각보다 애를 좀 먹었다. 이 풀이는 처음 접근했던 방법과 완전히 다른 방법이다.
처음에는 이런 과정으로 문제를 풀었다.
(1) X,Y 문자열을 하나하나 비교해가면서 겹치는 숫자를 Integer형 ArrayList에 차대로 담는다.
(2) ArrayList를 Arrays.toArray()메서드를 사용해 배열로 만들어 준다.
(3) Arrays.sort() 메서드를 사용해 배열을 정렬한다.
(4) 오름차순 정렬된 배열을 거꾸로 돌아가면서 StringBuilder에 이어 붙인다.

->시간초과
아마 정렬과정에서 시간이 너무 오래 걸리는 것 같다.
그래서 처음부터 다시 생각했어야 했다.

(1) 0~9까지의 숫자의 빈도수를 저장하는 크기가 10인 int형 배열을 각각 X,Y에 대해서 계산할 수 있도록 선언하여 준다.
(2) X,Y를 각각 문자 하나하나씩 확인하여 나온 숫자들의 빈도를 위에서 선언한 배열에 기록하여 준다.
(3) 9부터 시작해서 겹치는 만큼 StringBuilder에 이어붙이면서 문자열을 만들어준다.(X에 9가 5번, Y에 9가 3번 나왔다면, 9를 3번 이어붙인다.

결과

시간 초과가 난 후로도 계속 같은 방법을 사용하면서 수정만 하니까 답이 안나왔다. 과감하게 버렸어야 했는데 그러지 못해 많은 시간을 소비했다. 다른 사람들의 풀이를 보니 내가 푼 방법과 거의 유사했다.

출처 : 프로그래머스 코딩 테스트 연습 https://school.programmers.co.kr/learn/challenges

0개의 댓글