문제 링크
https://www.acmicpc.net/problem/1015
풀이
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에 저장한다. 이렇게 하면 중복이 발생해도 사전순으로 앞서는 것을 출력할 수 있다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 1260] DFS와 BFS with Python (0) | 2021.05.24 |
---|---|
[백준 2847] 게임을 만든 동준이 with Node.js (0) | 2021.05.22 |
[백준 1676] 팩토리얼 0의 개수 with Python (0) | 2021.05.17 |
[백준 1543] 문서 검색 with Node.js (0) | 2021.05.16 |
[백준 1654] 랜선 자르기 with Python (0) | 2021.05.15 |