본문 바로가기

Algorithm

[알고리즘/파이썬] 백준 10989번: 수 정렬하기 3 문제 메모리초과 해결방법, 정답

반응형

백준

 

휴... 이 문제랑 씨름을 했다. 계속해서 메모리초과가 떠서

스트레스받아 돌아버릴 지경에 이르러

 

구글링....을 했다,,,,ㅠㅠ

 

 

 

 

문제 설명

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

입력

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

출력

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

 

 

 

 

나의 오답 코드들

import sys
n = int(sys.stdin.readline())
nums=[]
for _ in range(n):
    num=int(sys.stdin.readline())
    nums.append(num)
nums.sort()
for j in nums:
    print(j)
n = int(input())
nums = []
for _ in range(n):
    num = int(input())
    nums.append(num)
nums.sort()
for j in nums:
    print(j)

 

 

 

반응형

 

정답 코드

import sys

n = int(sys.stdin.readline())  # 입력값 개수를 입력받음
num_list = [0] * 10001  # 수의 개수를 세기 위한 리스트 생성

# 입력값을 읽어들이고 해당 수의 개수를 num_list에 저장
for _ in range(n):
    num = int(sys.stdin.readline())
    num_list[num] += 1

# num_list를 순회하며 수의 개수에 따라 해당 수를 출력
for i in range(10001):
    if num_list[i] != 0:  # 개수가 0이 아닌 경우에만 해당 수를 출력
        for j in range(num_list[i]):
            print(i)

 

 

 

이유

계수정렬 알고리즘 문제였다. 그냥 냅다 덤볐으니ㅠㅠ 알고리즘을 순서대로 이론을 익힌 후에 문제를 풀어야겠다.

괜히 삽질만 주구장창했다... 그래도 재밌는 경험이었다!ㅎㅎ 모르다가 알게되는 온천수,, 석유가 터지는 기분 ㅋㅋㅋㅋ

 

 

 

 

반응형