알고리즘/백준

[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])