이 문제는 주어진 좌표들 중에서 해당 좌표가 몇 번째로 큰 좌표인지 물어보는 문제다.
처음에 접근했던 방법은 단순하게 이중 for문을 이용해서 답안을 제출했는데 당연하게도 시간 초과가 났다.
두 번째로 시도했던 방법이 정답 코드였는데 다른 사람의 풀이를 약간 참조해서 풀 수 있었다. 오름차순으로 정렬하면 해당 인덱스가 몇 번째로 큰 좌표를 의미한다는 것까지는 다다를 수 있었지만 중복제거를 set 객체를 통해서 할 수 있다는 점을 생각해내지 못했다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const [N, input] = fs.readFileSync(filePath).toString().trim().split("\n");
const arr = input.split(" ").map(Number);
const set = new Set(arr);
const obj = {};
Array.from(set)
.sort((a, b) => a - b)
.forEach((v, i) => {
obj[v] = i;
});
const answer = arr.map((v) => obj[v]);
console.log(answer.join(" "));
set 객체를 이용해서 중복을 제거한 후에 오름차순으로 정렬하고 객체에 인덱스 값을 저장해두는 방법으로 문제를 해결했다.
출처
좌표압축: https://www.acmicpc.net/submit/18870