본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #10989: 수 정렬하기 3

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

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

 

[정답]

import sys

N=int(sys.stdin.readline())

num_list=[0]*10001 #입력값이 10000보다 작거나 같은 자연수이니까 0~10000이므로 10001개를 넣어주어야 한다
for i in range(N):

    num=int(sys.stdin.readline())

    num_list[num]+=1
for k in range(10001):

    if(num_list[k]>0):
        for j in range(num_list[k]):
            print(k)


[오답] → 메모리 초과 (sort()함수를 쓰지 말라는건가?)

N=int(input())
num_list=[]
for i in range(N):
    num=int(input())

    num_list.append(num)

num_list.sort()

print(num_list)


sys모듈

파이썬 인터프리터에 관한 정보를 알 수 있음

ex)

sys.stdin.readline() : 표준 입력 장치

sys.stdout.write("~") : 표준 출력 장치

sys.version : 파이썬 버전 정보

sys.prefix : 파이썬 설치 경로

 

※ 백준 알고리즘에서 시간 초과의 문제를 해결하기 위해서 input()함수 대신 sys.stdin.readline()함수를 많이 사용한다.

 

 

counting 정렬

https://blog.naver.com/kdy246/222119447721

 

[알고리즘 기초] 정렬 - 계수 정렬(Counting Sort)

원리계수 정렬은 정렬하고자 하는 원소들의 값이 특정 숫자 N을 넘지 않는 경우에 사용할 수 있다.계수 정...

blog.naver.com

counting 정렬을 사용하는 것(=배열100001개 사용)이 sort()함수를 사용하는 것보다 메모리가 덜 든다.