import java.util.*;
class Solution {
public String solution(String X, String Y) {
int[] xCount = new int[10];
int[] yCount = new int[10];
//각 숫자가 나오는 횟수
for (char c : X.toCharArray()) {
xCount[c-'0']++;
}
for (char c : Y.toCharArray()) {
yCount[c-'0']++;
}
// 공통으로 나타나는 숫자 찾기
List<Integer> mateList = new ArrayList<>();
for (int i=0;i< xCount.length;i++) {
int commonCount = Math.min(xCount[i], yCount[i]);
for (int j=0;j<commonCount;j++) {
mateList.add(i);
}
}
//공통된 숫자가 없다면 -1
if (mateList.isEmpty()) return "-1";
//모두 공통된게 모두 0이라면 0
if (mateList.stream().allMatch(a->a==0)) return "0";
//정렬, 변환, 출력
mateList.sort(Collections.reverseOrder());
StringBuilder resultBuilder = new StringBuilder();
for (int num : mateList) {
resultBuilder.append(num);
}
return resultBuilder.toString();
}
}
처음에는 이중for문을 돌렸다가 시간초과가 나왔다.
그래서 힌트를 보고 각 숫자가 나오는 회수를 계산했다.
그런데 아래의 오답코드에서 정렬 한 뒤 변환 부분에서 자꾸 오류가 나는 것이었다!
그래서 어쩔 수 없이 chatGPT의 힘을 빌렸다...
덕분에 StringBuilder와 append라는 것으로 안전하게 변환 가능하다는걸 알았다.
//정렬, 변환, 출력
mateList.sort(Collections.reverseOrder());
long a=0;
for(int i=0;i< mateList.size();i++) {
a+=mateList.get(i)*Math.pow(10, mateList.size()-i-1);
}
return a+"";
long 범위를 넘어서는 무언가가 입력된게 아닐까 생각된다. (double도 유효숫자가 넘어가는듯했다)
제한사랑의 300만자릿수..? 굉장히 의미심장하다.