풀이
- Map 형식으로 X, Y의 문자 빈도를 계산한다.
- 9부터 0까지 내림차순으로 반복문을 만든다.
- 두 개의 Map의 같은 키가 있으면 값 중 작은값 만큼 숫자를 추가한다(String)
- 결과에 따라 리턴값을 변경한다.
import java.util.*;
class Solution {
public String solution(String X, String Y) {
// 두 숫자의 각 숫자 빈도를 저장할 맵 생성
Map<Character, Integer> countX = new HashMap<>();
Map<Character, Integer> countY = new HashMap<>();
// X의 숫자 빈도 계산
for (char c : X.toCharArray()) {
countX.put(c, countX.getOrDefault(c, 0) + 1);
}
// Y의 숫자 빈도 계산
for (char c : Y.toCharArray()) {
countY.put(c, countY.getOrDefault(c, 0) + 1);
}
// 결과를 저장할 StringBuilder
StringBuilder sb = new StringBuilder();
// 9부터 0까지 공통 숫자를 찾아 결과에 추가
for (char c = '9'; c >= '0'; c--) {
if (countX.containsKey(c) && countY.containsKey(c)) {
int commonCount = Math.min(countX.get(c), countY.get(c));
for (int i = 0; i < commonCount; i++) {
sb.append(c);
}
}
}
// 결과가 빈 문자열이면 -1 반환
if (sb.length() == 0) {
return "-1";
}
// 결과가 0으로만 구성되어 있으면 0 반환
if (sb.charAt(0) == '0') {
return "0";
}
// 결과 반환
return sb.toString();
}
}