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] 10814번: 나이순 정렬 (0) | 2023.04.30 |
---|---|
[백준 | JS] 11651번: 좌표 정렬하기 2 (0) | 2023.04.29 |
[백준 | JS] 11650: 좌표 정렬하기 (0) | 2023.04.29 |
Cos Pro 1급 1회 문제 7(머지소트, 병합정렬) (0) | 2022.05.19 |
[백준 | JS] 18870번: 좌표 압축