동캄의 코딩도장

백준 18870 [좌표 압축] 파이썬 본문

코테/BOJ

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

동 캄 2023. 3. 20. 11:19

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

 

18870번: 좌표 압축

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

www.acmicpc.net

#백준 18870 좌표 압축
import sys
input=sys.stdin.readline
N=int(input()) 
l=list(map(int,input().split())) #리스트에 저장
temp=list(map(int,l)) # 좌표 압축을 진행하기 위해 임시 리스트(temp) 생성
temp=list(set(temp)) # temp의 중복 제거
temp.sort() # temp를 정렬
compress={}
answer=[]
for i in range(len(temp)):
    compress[temp[i]]=i #제일 작은 값부터 순서대로 번호를 가지도록 설정

for i in range(N):
    answer.append(compress[l[i]])

print(*answer)

임시 리스트를 만든뒤에, 중복을 제거하고 정렬한다.

compress라는 딕셔너리를 만들고, 제일 작은 값부터 순서대로 각 key값에 각 순서(index)를 넣어준다.

그러고나서 리스트의 값을 변환해준다.(압축해준다.)