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();
}
}
다른 사람의 풀이를 보니 나와 거의 같게 풀어서 뿌듯했다..ㅎㅎ