본문 바로가기

개발/algorithm

[백준 18870번] 좌표 압축 - python

문제 링크

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

 

18870번: 좌표 압축

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

www.acmicpc.net

풀이 

- data2 에 data를 set으로 중복을 없애준 후 오름차순으로 정렬한 리스트를 넣어준다. 

- dic은 key는 숫자, value 는 자신보다 작은 숫자의 개수이다. 

이 때 각 숫자의 자신보다 작은 숫자의 개수는 data2에서 해당 숫자의 인덱스와 같다. 

따라서 dic[data2[i]] = i 를 for문 실행한다. 

- data에 입력된 순서대로 답을 출력해야 하므로 data의 숫자 별 value 값을 순서대로 answer에 저장해준다. 

# 빨리 끝나는 거 
import sys 

input = sys.stdin.readline 

n = int(input())

data = list(map(int,input().split()))

data2 = sorted(list(set(data)))

dic = {}

for i in range(len(data2)):
  dic[data2[i]] = i

answer = []
for i in data:
  answer.append(dic[i])

print(*answer)