연습장/백준(BOJ) 문제풀이
[백준 1015] 수열 정렬 with Node.js
Tesseractjh
2021. 5. 17. 15:53
문제 링크
https://www.acmicpc.net/problem/1015
1015번: 수열 정렬
P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다. 배열 A가 주
www.acmicpc.net
풀이
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/);
const N = +input[0];
const A = input.slice(1).map(v => +v);
const sortedA = A.slice().sort((a, b) => a-b);
const P = Array(N).fill(-1);
A.forEach((v, i) => {
P[i] = sortedA.findIndex((elem, idx) => {
if (elem === v && !(P.includes(idx))) return true;
});
});
console.log(P.join(" "));
배열 A를 정렬한 sortedA를 만들고, A를 순회하면서 sortedA에서 A의 요소와 동일한 요소의 인덱스를 P에 저장한다. 이 때, P에 이미 동일한 인덱스가 저장되어 있다면 동일한 숫자가 중복되어 있는 것이므로, findIndex의 콜백함수 내부에서 이를 확인하여 같은 요소의 다음 인덱스를 P에 저장한다. 이렇게 하면 중복이 발생해도 사전순으로 앞서는 것을 출력할 수 있다.