처음에 풀었던 방식인데
시간초과로 실패했다.
PriorityQueue<Integer> pqX = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> pqY = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < X.length(); i++) {
pqX.add(parseInt(String.valueOf(X.charAt(i))));
}
for (int i = 0; i < Y.length(); i++) {
pqY.add(parseInt(String.valueOf(Y.charAt(i))));
}
StringBuilder sb = new StringBuilder();
while (!pqX.isEmpty() && !pqY.isEmpty()) {
Integer peekX = pqX.peek();
Integer peekY = pqY.peek();
if (peekX > peekY) {
pqX.poll();
} else if (peekX < peekY) {
pqY.poll();
} else {
sb.append(peekX);
pqX.poll();
pqY.poll();
}
}
if (sb.length() == 0){
sb.append("-1");
}
System.out.println(Integer.parseInt(sb.toString())+"");
0만 있는 경우를 대비해 int로 변환했다가 다시 스트링으로 반환해줬다.
시간초과로 실패했다.
class Solution {
public String solution(String X, String Y) {
int[] countX = new int[10];
int[] countY = new int[10];
for (char c : X.toCharArray()) {
countX[c - '0']++;
}
for (char c : Y.toCharArray()) {
countY[c - '0']++;
}
StringBuilder sb = new StringBuilder();
for (int i = 9; i >= 0; i--) {
int cnt = Math.min(countX[i], countY[i]);
for (int j = 0; j < cnt; j++) {
sb.append(i);
}
}
if (sb.length() == 0) {
sb.append("-1");
}
return Integer.parseInt(sb.toString())+"";
}
}
return Integer.parseInt(sb.toString())+""; -> return sb.toString()
숫자 변환을 거치지 않고 String으로 return함
첫번째 숫자가 0인경우는 0으로 바꿔서 반환해줬다.
class Solution {
public String solution(String X, String Y) {
int[] countX = new int[10];
int[] countY = new int[10];
for (char c : X.toCharArray()) {
countX[c - '0']++;
}
for (char c : Y.toCharArray()) {
countY[c - '0']++;
}
StringBuilder sb = new StringBuilder();
for (int i = 9; i >= 0; i--) {
int cnt = Math.min(countX[i], countY[i]);
for (int j = 0; j < cnt; j++) {
sb.append(i);
}
}
if (sb.length() == 0) {
sb.append("-1");
} else if (sb.charAt(0) == '0') {
sb.setLength(0);
sb.append("0");
}
return sb.toString();
}
}
처음 풀었던 코드에서도 리턴문만 바꿔주니까 성공했다.
String을 int로 변경하는데 오래걸리는것같다.
전체적으로 위 코드보단 실행시간이 느리다.
class Solution {
public String solution(String X, String Y) {
PriorityQueue<Integer> pqX = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> pqY = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < X.length(); i++) {
pqX.add(parseInt(String.valueOf(X.charAt(i))));
}
for (int i = 0; i < Y.length(); i++) {
pqY.add(parseInt(String.valueOf(Y.charAt(i))));
}
StringBuilder sb = new StringBuilder();
while (!pqX.isEmpty() && !pqY.isEmpty()) {
Integer peekX = pqX.peek();
Integer peekY = pqY.peek();
if (peekX > peekY) {
pqX.poll();
} else if (peekX < peekY) {
pqY.poll();
} else {
sb.append(peekX);
pqX.poll();
pqY.poll();
}
}
if (sb.length() == 0) {
sb.append("-1");
} else if (sb.charAt(0) == '0') {
sb.setLength(0);
sb.append("0");
}
return sb.toString();
}
}