[백준] 12281. Sorting (Large)

1 분 소요

문제 링크

[백준] 12281. Sorting (Large)


풀이 과정

arr.forEach((v, i) => {
    if (v % 2) isOdd[i] = true;
    else isOdd[i] = false;
});

레이블(인덱스)에 알맞은 사람의 책을 진열해야 하므로, 책 번호가 짝수인지 홀수인지를 저장해 두었습니다.


for (let num of arr) {
    if (num % 2) minHeap.push(num);
    else maxHeap.push(num);
}

책의 숫자가 홀수면 Alex꺼, 짝수면 Bob꺼고, Alex는 오름차순으로, Bob 은 내림차순으로 정렬합니다.

  • 책 번호를 2로 나눈 나머지가 0이 아니면 홀수를 의미하므로, Alex 의 책이 저장되어 있는 minHeap 에 해당 숫자를 저장합니다.
  • 나머지가 0이면 짝수를 의미하므로, Bob 의 책이 저장되어 있는 maxHeap 에 해당 숫자를 저장합니다.


minHeap.sort((a, b) => a - b);
maxHeap.sort((a, b) => b - a);

for (let idx = 0; idx < N; idx++) {
    if (isOdd[idx]) arr[idx] = minHeap.shift();
    else arr[idx] = maxHeap.shift();
}

정렬 기준에 따라 정렬을 진행한 뒤, 맨 앞 요소를 꺼내는 shift 메소드 를 통해 책장을 진열합니다.


코드

const fs = require("fs");
const stdin = (process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `2
5
5 2 4 3 1
7
-5 -12 87 2 88 20 11`
)
    .trim()
    .split("\n");
const input = (() => {
    let line = 0;
    return () => stdin[line++];
})();

const T = +input();
let answer = "";

for (let tc = 1; tc <= T; tc++) {
    const N = +input();
    const arr = input().split(" ").map(Number);
    const isOdd = Array(N);
    let minHeap = [],
        maxHeap = [];

    arr.forEach((v, i) => {
        if (v % 2) isOdd[i] = true;
        else isOdd[i] = false;
    });

    for (let num of arr) {
        if (num % 2) minHeap.push(num);
        else maxHeap.push(num);
    }

    minHeap.sort((a, b) => a - b);
    maxHeap.sort((a, b) => b - a);

    for (let idx = 0; idx < N; idx++) {
        if (isOdd[idx]) arr[idx] = minHeap.shift();
        else arr[idx] = maxHeap.shift();
    }

    answer = answer.concat("Case #" + tc + ": " + arr.join(" ") + "\n");
}

console.log(answer);

카테고리:

업데이트:

댓글남기기