
99클럽 코테 스터디 29일차 TIL
💙 JAVA 비기너

class Solution {
public int largestInteger(int num) {
PriorityQueue<Integer> oddHeap = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> evenHeap = new PriorityQueue<>(Collections.reverseOrder());
String[] numbers = String.valueOf(num).split("");
for(String numStr : numbers) {
int number = Integer.parseInt(numStr);
if(number % 2 == 0) {
evenHeap.add(number);
} else {
oddHeap.add(number);
}
}
String answer = "";
for(String numStr : numbers) {
int number = Integer.parseInt(numStr);
if(number % 2 == 0) answer += String.valueOf(evenHeap.poll());
else answer += String.valueOf(oddHeap.poll());
}
return Integer.parseInt(answer);
}
}
오늘은 너무 피곤해서 하지 말까 했으나 내일 회식이라서 내일은 진짜 못할 것 같아서 새벽에 열심히 작성해본다...
문제의 요점은 홀수는 홀수끼리, 짝수는 짝수끼리 자리를 바꿔서 가장 큰 수를 만들어내라!!이다.
그래서 홀수는 홀수끼리 oddHeap 힙에, 짝수는 짝수끼리 evenHeap 힙에 저장하여 내림차순으로 정렬하였다.
그리고 다시 num을 문자열 배열로 저장한 numbers를 하나씩 돌며 홀수이면 oddHeap에서 짝수면 evenHeap에서 값을 가져오도록 하여 홀수와 짝수 자리를 지키도록 해줬다.