Algorithm/백준

[백준/Python] 좌표 압축

poppy 2021. 9. 8. 11:05
반응형

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

 

18870번: 좌표 압축

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

www.acmicpc.net

[처음 코드]

n = int(input())
nums = list(map(int, input().split()))

comp = sorted(list(set(nums)))

for num in nums:
	print(comp.index(num), end = ' ')

 

처음엔 index() 를 사용해서 리스트에서의 인덱스를 찾아 출력하도록 하였다. 그랬더니 시간 초과가 났다. 질문하기에서 찾아보니 index() 는 리스트를 순차 탐색하므로 한 번 사용할 때 O(N) 만큼 걸려서 결국 O(N^2) 만큼 걸려서 시간 초과가 난 것이었다. 시간 초과가 나지 않게 하기 위해서는 딕셔너리를 사용해야 했고 딕셔너리는 한 번에 O(1) 만큼 걸려서 결국 O(N) 만큼 걸리게 된다.

 

[최종 코드]

n = int(input()) # 숫자의 개수
nums = list(map(int, input().split())) # 숫자 리스트

comp = sorted(list(set(nums))) # 중복 제거한 후 정렬
dic_comp = {comp[i] : i for i in range(len(comp))} # 딕셔너리로 변경

for num in nums:
	print(dic_comp[num], end = ' ') # 딕셔너리에서 인덱스 값을 찾아 출력
반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준/Python] 스타트와 링크  (0) 2021.09.18
[백준/Python] 연산자 끼워넣기  (0) 2021.09.17
[백준/Python] 단어 정렬  (0) 2021.09.06
[백준/Python] 통계학  (0) 2021.08.30
[백준/Python] 영화감독 숌  (0) 2021.08.25