[정렬] 수 정렬하기(?)

2021. 5. 30. 23:24백준

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

두 가지 방법으로 풀었는데, 나름 참신하다고 생각한 방법이 python 내장 정렬이랑 시간이 비슷하게 걸려서 놀랐다.

 

아래 104ms가 걸린 방법은 기존 정렬 알고리즘이랑 다르게 풀어보고 싶어서 내 나름대로 생각해서 해본 방식이다.

 

length = int(input())

EMPTY = "EMPTY"

dummy = [EMPTY] * 2001
for i in range(length):
    num = int(input()) + 1000
    dummy[num] = num


result = list(filter(lambda x: x != EMPTY, dummy))

for i in result:
    print(i - 1000)

 

수가 나올 수 있는 범위(-1000 ~ 1000)만큼 배열을 만들고, 그 배열을 EMPTY로 채운다.

 

들어오는 수가 음수일 경우를 대비해서 1000을 더한다.

 

더한 수를 배열의 인덱스로 삼아 값을 채운다.

 

배열의 EMPTY 부분을 다 제거하고 남은 부분만 추리면 자동으로 오름차순 정렬.