알고리즘/백준
[Silver II] 좌표 압축 - 18870 (JavaScript, Python)
KimMinGyun
2024. 7. 10. 23:50
값 / 좌표 압축, 정렬
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.
X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.
첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
코드
1. JavaScript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split('\n');
let n = Number(input[0]);
let arr = input[1].split(' ').map(Number);
// 정렬된 배열에서 중복된 값을 제거하여 고유한 값만 남김
let uniqueArray = [...new Set(arr)];
// arrSort 배열을 오름차순으로 정렬
uniqueArray.sort((a, b) => a - b);
// 각 숫자의 압축된 인덱스를 저장할 객체
let myMap = new Map;
for (let i = 0; i < n; i++) {
myMap.set(uniqueArray[i], i);
}
let answer = "";
for (let i = 0; i < n; i++) {
answer += myMap.get(arr[i]) + ' ';
}
console.log(answer);
2. Python
import sys
input = sys.stdin.readline
N = int(input())
nums = list(map(int, input().split()))
list_n = sorted(set(nums))
dic = {list_n[i] : i for i in range(len(list_n))}
print(*[dic[i] for i in nums])