백준 10989번 '수 정렬하기 3' - Python

림민지·2025년 1월 16일

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

#️⃣10989번

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.


🔮 풀이

나는 처음에 브론즈1 문제치고 너무 쉬워서 뭐지? 하고 append와 리스트를 활용해서 문제를 풀었다.

🙄 초기 코드

N = int(input())
L = []
for i in range(N) :
    num = int(input())
    L.append(num)
L.sort()

print(L)

for i in range(N) :
    print(L[i])

하지만 제출하고 보니 메모리 초과라는 결과가 나왔고, 조건을 다시 살펴보니 " 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. " 이런 조건이 있었던 것이다.....!!!!

N의 수가 너무 클 때가 있어 메모리 초과라는 결과가 나왔나보다.

그래서 방식을 바꾸었다.
1. 0이 든 10000칸의 리스트를 미리 만들어 둔다.
2. 입력 받은 숫자와 일치하는 리스트의 주소에 +1을 한다.
3. 출력 시, 10000번 동안 반복하며 리스트의 i번째 칸의 값이 0이 아니면 i 값을 출력

N = int(input())
L = [0]*10001

for i in range(N) :
    num = int(input())
    L[num] += 1

for i in range(10001) :
    if L[i] !=0 :
        for j in range(L[i]) :
            print(i)

근데 그 다음 결과는 런타임 에러... 뭐가 문제인지 고민하다가 GPT님께 여쭈었다

🤖 GPT님의 답변

입력 속도 개선

input() 함수는 반복적으로 호출할 경우 속도가 느릴 수 있습니다. 대신, sys.stdin.readline를 사용하여 입력 속도를 높일 수 있습니다. 특히 데이터 크기가 큰 경우 유용합니다.

import sys
input = sys.stdin.read

💡 개선 후 코드

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

L = [0]*10000

for i in range(N):
	a = int(sys.stdin.readline())
	L[a-1] += 1

for k in range(10000):
	if L[k] != 0:
		for j in range(L[k]):
			print(k+1)

여담,, 실패는 힘들어

profile
@lim_128

0개의 댓글