[백준 | JS] 18870번: 좌표 압축

파송송계란빡 ㅣ 2023. 4. 29. 23:52

https://www.acmicpc.net/problem/18870

 

문제

수직선 위에 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
  • -109 ≤ Xi ≤ 109

예제 입력 1 복사

5
2 4 -10 4 -9

예제 출력 1 복사

2 3 0 3 1

예제 입력 2 복사

6
1000 999 1000 999 1000 999

예제 출력 2 복사

1 0 1 0 1 0

 

문제

 

let fs = require("fs");
//let input = fs.readFileSync("./test.txt").toString().split("\n");
let input = fs.readFileSync("/dev/stdin").toString().split("\n");

let n = Number(input[0]);
let arr = input[1].split(" ").map(Number);

//1. 중복된 값을 없애기 위해서 set 수행
const uniqueArr = [...new Set(arr)];

//2. 오름차순 정렬 수행
const sortArr = uniqueArr.sort((a, b) => a - b);
//3. 0부터 순서 매기기(순서가 자기보다 작은거 개수를 갖고있음)
let myMap = new Map();
for (let i = 0; i < uniqueArr.length; i++) {
    myMap.set(uniqueArr[i], i);
}

//4. Map 객체에 있는거 객체 순서 꺼내오기
let answer = "";
for (let item of arr) {
    //console.log(item, myMap.get(item));
    answer += myMap.get(item) + " ";
}

console.log(answer);
[백준 | JS] 18870번: 좌표 압축