728x90

10/ 20 파이썬 공부
1. 백준 10989 수 정렬하기 3
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 
둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

>>> 코드 시도 1

l =[]
for i in range(int(input())):
    l.append(int(input()))
l.sort()
for i in range(len(l)):
    print(l[i])



이전 '수 정렬하기' 문제에서 하던대로 코드를 짜보았으나 메모리 초과가 떴다.
다른 방식을 생각해보야아 할듯하다.
메모리 제한은 8MB.
아마도 수의 개수가 10,000,000이 최대다 보니, 길이가 10,000,000인 리스트가 메모리를 잡아먹는 듯 하다.
길이를 줄여보자.

>>> 코드 정답 1

import sys
l = [0] * 10000
for i in range(int(sys.stdin.readline())):
    n = int(sys.stdin.readline())
    l[n-1] += 1
for i in range(len(l)):
    if l[i] != 0:
        for j in range(l[i]):
            print(i+1)



>>> 코드 설명
숫자 제한이 1 <= n <= 10000 이기 때문에 value가 0 이고 길이가 10000인 리스트를 만들어 준다.
그리고 숫자가 입력되면 해당 숫자 인덱스의 value를 +1 해서 숫자를 카운트한다.
마지막에 리스트의 value만큼 해당 리스트를 출력한다.

728x90

+ Recent posts