백준

[실버] 좌표압축 (18870번)_JS

chsua 2022. 12. 19. 18:02

문제

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.

X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.

 

입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.

 

출력

첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.

 

제한

  • 1 ≤ N ≤ 1,000,000
  • -10^9 ≤ Xi ≤ 10^9
내 답안:
const { SlowBuffer } = require("buffer");
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\\n") ;
input.shift() ;
input = input[0].split(" ").map(Number) ;

let arr = [...new Set(input)].sort((a,b) => a - b) ;
let map = new Map(); 

for (let i = 0 ; i < arr.length ; i++ ){
    map.set(arr[i], i) ;
}

let answer = input.map((x) => map.get(x)) ;

console.log(answer.join(" ")) ;

>> arr를 set해서 중복을 없앤 후 sort해줌
>> map으로 각 요소의 index를 쉽게 찾을 수 있게 해놓음
>> input.map으로 찾음 

'백준' 카테고리의 다른 글

[실버] 회의실 배정 (1931번)_JS  (0) 2022.12.19
[실버] Z (1074번)_JS  (0) 2022.12.19
[실버] 연결 요소의 갯수 (11724번)_JS  (0) 2022.12.19
[백준] 최대 힙 ( 1279번)_JS  (0) 2022.12.19
[실버] 색종이 만들기 (2630번)_JS  (0) 2022.12.19