BAEKJOON (Python)/단계별

BAEKJOON_18870 "좌표 압축" PYTHON

RiLLa_0511 2023. 3. 20. 19:02
728x90

[백준] 18870번 Python 파이썬

 

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())
num = list(map(int, input().split()))

s_num = sorted(num)

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

# 수정 코드

 

dict 자료형을 이용하여 index를 담아주었다. 

 

오름차순 정렬을 할 때 꼭 set() 함수를 이용하여 중복되는 수를 제거해 주어야 한다.

 

출력은 한 줄로 해준다.

# 정답 처리된 코드

import sys

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

s_num = sorted(set(num)) # 중복되는 수를 set()함수를 이용하여 제거한다.

num_dict = {val: index for index, val in enumerate(s_num)} # enumerate() 함수를 이용하여 s_num 리스트의 인덱스와 원소를 각각 할당해준다.

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

 

혼자 공부하며 올리는 블로그입니다. 틀린 내용은 댓글 남겨주시면 감사하겠습니다.