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
에서 값을 가져오도록 하여 홀수와 짝수 자리를 지키도록 해줬다.