본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 18870번 좌표 압축(with python)

by 윤무무 2023. 1. 25.

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

1. 내가 작성한 코드
import sys

n = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))
num = sorted(set(arr))

for i in arr:
  print(num.index(i), end=' ')

set 함수를 이용해 arr의 중복을 제거한 후, 인덱스 값을 출력하는 형태로 풀이를 진행했다.

 

그러나 index()로 인해 시간복잡도가 증가되어 시간 초과가 발생하는 상황😥😥

 

딕셔너리를 이용하는 방법으로 수정했다.

 

 

2. 수정 후 코드
import sys

n = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))
num = sorted(set(arr))

dic = {num[i]:i for i in range(len(num))}
for i in arr:
  print(dic[i], end=' ')

index를 하나하나 조회할 필요 없이 key값으로 value를 찾을 수 있어 시간을 절약할 수 있다.

 

딕셔너리 활용하기✨

댓글