Skip to content

[백준] 18870. 좌표 압축

수직선 위에 \(N\)개의 좌표 \(X_{1}, X_{2}, ..., X_{N}\)이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
\(X_{i}\)를 좌표 압축한 결과 \(X'_{i}\)의 값은 \(X_{i} > X_{j}\)를 만족하는 서로 다른 좌표 \(X_{j}\)의 개수와 같아야 한다.
\(X_{1}, X_{2}, ..., X_{N}\)에 좌표 압축을 적용한 결과 \(X'_{1}, X'_{2}, ..., X'_{N}\)를 출력해보자.


좌표 압축의 개념만 이해하면 문제 자체는 어렵지 않은데, 풀이 과정에서 list.index() 메서드를 사용하면 시간 복잡도가 높아 시간 초과가 뜬다. \(O(1)\)의 시간 복잡도를 갖는 딕셔너리를 사용해서 인덱스를 별도로 저장하는 방식으로 풀어내야 한다.

input()

i = [int(i) for i in input().split()]
d = {v: i for i, v in enumerate(sorted(set(i)))}

print(*[d[e] for e in i])

Reference