99클럽 코테 스터디 29일차 TIL - 홀짝 자리바꾸기

수삼·2024년 11월 25일
0

코딩테스트

목록 보기
34/44

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());
    }
}
  1. int 배열로 변환해 우선순위 큐(내림차순)에 넣어준다. list에는 홀, 짝의 자리를 저장해둔다. 1352이면 0001 이렇게 저장된다.
  2. 큐에서 가장 앞에 있는 숫자를 꺼내 홀/짝인지 비교한 후 배열에 넣어준다.
  3. 값을 리턴해준다.

0개의 댓글