
class Solution {
public int largestInteger(int num) {
ArrayList<Integer> list = new ArrayList<>();
int[] arr = Stream.of(String.valueOf(num).split("")).mapToInt(Integer::parseInt).toArray();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < arr.length; i++) {
pq.offer(arr[i]);
list.add(arr[i] % 2);
}
while (!pq.isEmpty()) {
int idx = pq.peek() % 2 == 0 ? list.indexOf(0) : list.indexOf(1);
arr[idx] = pq.poll();
list.set(idx, null);
}
StringBuilder sb = new StringBuilder();
for (int digit : arr) {
sb.append(digit);
}
return Integer.parseInt(sb.toString());
}
}
- int 배열로 변환해 우선순위 큐(내림차순)에 넣어준다. list에는 홀, 짝의 자리를 저장해둔다. 1352이면 0001 이렇게 저장된다.
- 큐에서 가장 앞에 있는 숫자를 꺼내 홀/짝인지 비교한 후 배열에 넣어준다.
- 값을 리턴해준다.