카테고리 없음

[python][백준/BOJ] 18870번 : 좌표 압축

haju 2023. 9. 17. 19:21

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

✅ 첫 번째 시도 

import sys

n=int(sys.stdin.readline())
x=list(map(int,sys.stdin.readline().split()))

#python 얕은 복사(shallow copy)
#dx=x[:] 로도 가능
dx=set(x.copy())
dx=list(dx)
dx.sort()
for i in x:
    print(dx.index(i),end=' ')

❗ .index() 를 통해 매번 호출하는 것은 O(N)의 시간복잡도를 가지기 때문에 오래 걸린다. 

 다른 방법을 생각해본다. => 딕셔너리를 활용해보는 것을 떠올림!

 

✅ 최종 코드

  • 인덱스의 값을 딕셔너리로 저장함 (key: x리스트의 값, value : x리스트 값의 인덱스)
  • 그 후 반복문을 돌면서 키에 해당하는 인덱스의 값을 출력한다.
import sys

n=int(sys.stdin.readline())
x=list(map(int,sys.stdin.readline().split()))

#python 얕은 복사(shallow copy)
#dx=x[:] 로도 가능
dx=set(x.copy())
dx=list(dx)
dx.sort()

nd=dict()
for i in range(len(dx)):
    nd[dx[i]]=i

for i in x:
    print(nd[i],end=' ')