[백준, BOJ 18870] 좌표 압축 (python)
Problem Solving/BOJ

[백준, BOJ 18870] 좌표 압축 (python)

728x90

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

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net


문제

수직선 위에 N개의 좌표 $X_1, X_2, ..., X_N$이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

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

$X_1, X_2, ..., X_N$에 좌표 압축을 적용한 결과 $X'_1, X'_2, ..., X'_N$를 출력해보자.

입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 $X_1, X_2, ..., X_N$이 주어진다.

출력

첫째 줄에 $X'_1, X'_2, ..., X'_N$을 공백 한 칸으로 구분해서 출력한다.

제한

  • 1 ≤ N ≤ 1,000,000
  • $-10^{9} \le X_i \le 10^{9}$
728x90

 

예제 입력 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

n = int(input())
x = list(map(int, input().split()))

# x를 정렬 & 중복 제거
arr = sorted(list(set(x.copy())))
# 딕셔너리에 인덱스와 값을 넣어 빨리 찾을 수 있게 함
dic = {}
for i in range(len(arr)):
    dic[arr[i]] = i


for i in range(n):
    print(dic[x[i]], end=' ')
728x90