728x90

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

 

# 조건

  • 수직선 위에 N개의 좌표 X1, X2, ... Xn
  • Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.
  • 1 <= N <=1,000,000
  • -10^9 <= Xi <= 10^9
 

# 접근 방법 및 Solution

  • 처음 리스트를 deepcopy를 통하여 복사해준다.
  • 이후 오름차순 정렬을 하고 가장 작은 수부터 0으로 딕셔너리에 넣어준다.
  • 원래 리스트를 순회하며 key에 해당하는 value값을 들고온다.

 

 

import sys
input = sys.stdin.readline
from copy import deepcopy

N = int(input())

num = [*map(int, input().split())]
num2 = deepcopy(num)

num2.sort()
result = dict()
n = 0
for i in num2:
    if not i in result:
        result[i] = n
        n+=1

for j in num:
    print(result[j], end= ' ')
728x90