[boj] 1015. 수열 정렬 (node.js)

호이·2022년 1월 26일
0

algorithm

목록 보기
5/77
post-thumbnail

문제 요약

배열 A의 원소가 주어질 때, A[i] = B[P[i]]를 만족하는 P를 구하여라.

  • 주어진 배열을 정렬한 후 정렬된 배열의 인덱스를 활용하는 문제.

풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "input.txt";
const [N, input] = fs.readFileSync(filePath).toString().split("\n");

let i = 0;
const arr = [];
input.split(" ").map((x) => {
  arr[i] = [Number(x), i];
  i++;
});

arr.sort((a, b) => a[0] - b[0]);
for (let i = 0; i < N; i++) {
  arr[i].push(i);
}
arr.sort((a, b) => a[1] - b[1]);
console.log(arr.reduce((str, x) => (str += x[2] + " "), ""));

문제 풀이 과정에 따라 차근차근히 변환 과정을 이해해야 하는 문제다.
처음에는 다소 헷갈렸으나, 정렬 과정을 console.log 로 찍으면서 확인해 보면, 문제에서 출력하고자 하는 답을 확인하기까지 정렬을 두 번 반복해야 함을 알 수 있다.

  1. 첫 번째 정렬에서는 정렬 이전에 인덱스를 push해두고 문제에서 주어진 값으로 정렬한다. 정렬을 마치면 인덱스의 위치가 바뀐 것을 확인할 수 있다.
  1. 두 번째 정렬에서 또 다시 인덱스를 push 해주고 1번에서의 인덱스를 기준으로 다시 정렬한다. 여기서 정렬 완료한 결과 중 2번에서 push했던 인덱스 값이 바로 문제에서 요구하는 답이 된다.
profile
매일 부활하는 개복치

0개의 댓글