본문 바로가기
프로그래밍 언어

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

by 진진리 2023. 10. 20.
728x90
  • 시간 초과
import java.util.regex.Pattern;
import java.util.Arrays;

class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        String reg = "[0]+";
        
        for(int i=0;i<X.length();i++){
            char c = X.charAt(i);
            String string_c = Character.toString(c);
            if(Y.contains(string_c)){
                answer += string_c;
                int index = Y.indexOf(string_c);
                StringBuilder sb = new StringBuilder(Y);
                sb.deleteCharAt(index);
                Y=sb.toString();
            }
        }
        
        if(answer.equals("")) answer="-1";
        else if(Pattern.matches(reg, answer)) answer="0";
        else{
            char[] char_arr = answer.toCharArray();
            Arrays.sort(char_arr);
            answer = new StringBuilder(new String(char_arr)).reverse().toString();
        }
        
        return answer;
    }
}

 

  • 시간 초과 해결

다른 사람이 질문한 내용에서 contains의 사용을 줄여보라는 얘기가 있어서 공통된 문자(숫자)를 찾는 방법을 바꿨다.

숫자의 개수를 새는 배열 numbers1과 numbers2을 만들어 X와 Y에서 숫자를 찾을 때마다 개수를 늘려준 뒤, 두 numbers의 최소값(공통되는 횟수)에 맞게 역순으로 9부터 넣어주었다.

import java.util.regex.Pattern;
import java.util.Arrays;

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        String reg = "[0]+";
        int[] numbers1 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        int[] numbers2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

        for(int i=0;i<X.length();i++){
            char c = X.charAt(i);
            numbers1[c-'0']++;
        }
        for(int i=0;i<Y.length();i++){
            char c = Y.charAt(i);
            numbers2[c-'0']++;
        }

        for(int i=9;i>=0;i--){
            int min = Math.min(numbers1[i], numbers2[i]);
            for(int j=0;j<min;j++){
                answer.append((char) (i + '0'));
            }
        }

        if(answer.toString().equals("")) return "-1";
        else if(Pattern.matches(reg, answer.toString())) return "0";

        return answer.toString();
    }

}

 

다른 사람의 풀이를 보니 나와 거의 같게 풀어서 뿌듯했다..ㅎㅎ