본문 바로가기

코딩테스트/Python

[Python] 백준 #18870 - 좌표압축

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

풀이

import sys
input =sys.stdin.readline
n = int(input())
arr = list(map(int,input().split()))
s = list(sorted(set(arr)))
dic={value:index for index,value in enumerate(s)}
for i in arr:
    print(dic[i],end=" ")

 

1. n개의 숫자를 입력받아 리스트로 만들어준다.

2. 리스트에서 중복된 것을 없애주기 위해서 집합으로 만들어주고 정렬해준다. 그 다음 다시 리스트로 만들어준다.

3. 중복을 제거한 리스트를 enumerate로 인덱스와 값을 구하고 딕셔너리로 만들어준다. 딕셔너리의 key가 s의 값이 되고 value가 그 값의 순서가 된다.

4. arr의 값을 딕셔너리에 조회한다. dic[i]를 하면 그 값의 순서가 나온다.

 

 

나는 딕셔너리를 만들지 않고 s.index(i)를 사용하여 위치를 구하였다. 그래서 계속 시간초과가 나왔다!!ㅠㅠ

결국 인터넷 행.. 딕셔너리로 만들어서 구하니 시간초과가 안난다.. index가 느린건 알고있었지만.. 휴 ㅠ 딕셔너리로 만드는거 기억하자,,