알고리즘/알고리즘 풀이

[프로그래머스_1] 숫자 짝꿍 JAVA

데부한 2023. 4. 11. 22:41
반응형

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

CODE

import java.util.*;
class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        
        int[] xCntArr = new int[10];
        int[] yCntArr = new int[10];
        
        for(String x : X.split("")) {
            xCntArr[Integer.parseInt(x)]++;
        }
        for(String y : Y.split("")) {
            yCntArr[Integer.parseInt(y)]++;
        }
        
        for(int i = 9; i >= 0; i--) {
            while(xCntArr[i] > 0 && yCntArr[i] > 0) {
                answer.append(i);
                
                xCntArr[i]--;
                yCntArr[i]--;
            }
        }
        
        if("".equals(answer.toString())) return "-1";
        if("0".equals(answer.toString().substring(0, 1))) return "0";
        
        return answer.toString();
    }
}

맨 처음에 X, Y를 char 배열로 만든 후 정렬 > StringBuilder로 변환 > 정렬(내림차순) > for문으로 indexOf()로 찾음 이런 식으로 했다가 시간 초과 어택을 맞고 이것저것 찾아본 결과 힌트 중에 반복문의 기준을 X나 Y의 길이에 두지 말고, 어차피 0~9로 이루어진 숫자이니 이 숫자를 중심으로 생각하라는 힌트를 보고 코드 작성했다. 어려운 내용의 코드는 아니지만 시간 복잡도를 생각해볼 수 있는 좋은 문제였던 거 같다.

 

실행 결과

반응형