알고리즘/백준

백준 18870: 좌표 압축 (Python)

sssbin 2021. 9. 15. 01:15

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

import sys

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

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

 

숫자를 num으로 입력받아 리스트로 만들고

중복을 제거하고 정렬한 리스트를 하나 더 만들어서 그 리스트의 인덱스를 출력하도록 했다

근데 시간 초과가 떴다.... 인덱스를 하나하나 찾는데 시간이 오래 걸려서 그렇다고 한다

** 리스트.index(i) : 시간 복잡도 O(n) **

 

import sys

n = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
num_set = sorted(list(set(num)))
num_dic = {num_set[i] : i for i in range(len(num_set))}

for i in num:
    print(num_dic[i], end=' ')

 

그래서 딕셔너리를 이용했다

딕셔너리는 {key:value}로 값을 저장하는데 key는 중복 허용 X

딕셔너리에 key값을 num, value값을 더 작은 숫자의 개수로 넣어주고 num을 돌면서(key - num) 값을 출력했다!

** 딕셔너리 : 시간 복잡도 O(1) **

 

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

백준 11047: 동전 0 (Python)  (0) 2021.09.25
백준 11399: ATM (Python)  (0) 2021.09.25
백준 10814: 나이순 정렬 (Python)  (0) 2021.09.15
백준 1181: 단어 정렬 (Python)  (0) 2021.09.14
백준 11651: 좌표 정렬하기 2 (Python)  (0) 2021.09.13