프로그래머스 131128번
https://school.programmers.co.kr/learn/courses/30/lessons/131128
중복되는 숫자를 체크해서, 내림차순 정렬만 하면 된다.
은근히 최적화가 중요한 문제인 것 같음
import java.util.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
char[] chArr = X.toCharArray();
char[] chArr2 = Y.toCharArray();
int N = chArr.length;
int M = chArr2.length;
HashMap<Character, Integer> map = new HashMap<>();
for(int i=0; i<N; i++) {
char ch = chArr[i];
map.put(ch, map.getOrDefault(ch, 0) + 1);
}
List<Character> list = new ArrayList<>();
for(int i=0; i<M; i++) {
char ch = chArr2[i];
if(map.containsKey(ch) && map.get(ch) > 0) {
list.add(ch);
map.put(ch, map.get(ch) - 1);
}
}
if(list.isEmpty()) {
return "-1";
}
Collections.sort(list, Collections.reverseOrder());
StringBuilder sb = new StringBuilder();
for(char num : list) {
sb.append(num);
}
// 내림차순으로 정렬했기 때문에 0이외의 숫자들이 먼저 나올 수 밖에 없음에도 불구하고, 0이 가장 앞에 온다는 것은 0밖에 없다는 것을 의미함
if(sb.charAt(0) == '0') return "0";
return sb.toString();
} // End of solution()
} // End of Solution class