10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

✏️ 1번째 코드 - 메모리초과(실패)

# sorted 사용

N = int(input())
lis = []
for _ in range(N):
    num = int(input())
    lis.append(num)

for number in sorted(lis):
    print(number)

 

✏️ 2번째 코드 - 메모리초과(실패)

# input() -> sys.stdin.readline() 변경

import sys
N = int(sys.stdin.readline())
lis = []
for _ in range(N):
    num = int(sys.stdin.readline())
    lis.append(num)

for number in sorted(lis):
    print(number)

 

✏️ 3번째 코드 - 성공

# 계수정렬 활용

import sys
N = int(sys.stdin.readline())
nlist = [0]*(10000 + 1)

for _ in range(N):
    nlist[int(sys.stdin.readline())] += 1

for i in range(len(nlist)):
    if nlist[i] != 0:
        for num in range(nlist[i]):
            print(i)

✏️ 풀이

- 입력받는 리스트 nlist의 길이를 고정한다. 

- 숫자입력될때마다 그 숫자에 해당하는 nlist의 인덱스의 갑을 1 증가시킨다.

  ex. 2 2 2 3 1 이렇게 입력한다면

  nlist=[0,1,3,1] # 해당숫자 인덱스랑 입력값 일치시키기위해 nlist길이를 입력값+1만큼 정해놨던것.

- nlist를 순회하며 출력하는데 값이 0이면 입력한적 없다는것이므로 0이아닐때만 for 돌면서 해당 '인덱스'값을 출력

+ Recent posts