알고리즘/백준[baekjoon]

[baekjoon] 18870번 : 좌표압축 by python

코딩하는이씨 2022. 3. 8. 21:10
728x90
반응형

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

code

#좌표압축
import sys
input = sys.stdin.readline

n = int(input())

a = [int(x) for x in input().split()]
set_a = set(a)
list_a = list(set_a)
list_a.sort()
dic = {list_a[i]: i for i in range(len(list_a))}


for i in a:
    print(dic[i],end=" ")

 

 

처음 내가 작성한 코드는 아래와 같이 리스트만 사용하여 해결하였다.

import sys
input = sys.stdin.readline

n = int(input())

a = [int(x) for x in input().split()]
set_a = set(a)
list_a = list(set_a)
list_a.sort()

x = []
for i in range(len(list_a)):
    x.append([i,list_a[i]])


for i in a:
    for num,xi in x:
        if i == xi:
            print(num,end=" ")

이렇게 해결하니 문제점이 시간초과가 뜬다는 점이다.

리스트의 시간복잡도는 O(n)

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

시간초과를 해결하기위해선 딕셔너리로 바꿔 해결해야했다.

 

또한 처음 무작정 작성한 코드보다 딕셔너리를 사용함으로써 더 깔끔한 코드를 완성시킬수 있었다.

알고리즘문제를 풀때 시간복잡도를 조금 더 신경쓰면서 문제를 풀어나가야겠다.

 

728x90
반응형