본문 바로가기

알고리즘/python

[python/파이썬] 백준 18870 좌표 압축

반응형

[문제 출처]

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

[문제 풀이]

입력이 주어졌을 때 그 숫자들을 0부터의 값으로 바꾸어 주면 되는 문제이다.

이름은 압축이지만, 기존 비율을 그대로 반영시키는 것이 아닌,

오름차순으로 정렬했을 때 몇 번째에 해당하는지로 좌표값을 변경시켜주어야 한다.

따라서 주어진 입력을 오름차순으로 정렬하고, 순서대로 0부터의 값을 배정하였다.

같은 값에 대해서는 같은 값으로 압축되어야 하므로 딕셔너리를 이용해 주었다.

#18870
import sys
input = sys.stdin.readline

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

new = dict()
v = 0
for i in x_sorted:
  if i not in new.keys():
    new[i] = v
    v += 1

result = []
for i in x:
  result.append(new[i])

print(*result)
반응형