[백준/node.js] 18870번 좌표 압축

2023. 8. 20. 11:35Trip to Cote

문제를 보고 실버2라 와 개어렵겠다라고 생각했으나 생각보다 답이 쉽게 나와서 돌렸다.

const [n, k] = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .replaceAll("\r", "")
  .split("\n");
let answer = "";
const points = k.split(" ").map(Number);
const points2 = k.split(" ").map(Number).sort();
points.map((i) => (answer += points2.indexOf(i) + " "));
console.log(answer.trim());

코드도 짧아서 성공이다 싶었지만 시간초과로 계속 실패였다. 문제는 내가 시간 복잡도에 대한 개념이 없다보니 발생한 문제였다. 순회하면서 인덱스 값을 찾는게 복잡도를 상승시킨다는 글을 보았다. 다음은 문제 대신 이 부분을 공부해야겠다.

 

const [n, k] = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .replaceAll("\r", "")
  .split("\n");
let answer = "";
const points = k.split(" ").map(Number);
let points2 = [...new Set(points)].sort((a, b) => a - b);

let myMap = new Map();
for (let i = 0; i < points2.length; i++) {
  myMap.set(points2[i], i)
}

for (x of points) answer += myMap.get(x) + " ";
console.log(answer)

강의에서는 map 생성자 함수를 통해서 풀었다.