문제 링크
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제
문제 풀이
문제만 봐서는 너무 간단해서 단순하게 접근했다가 메모리 초과가 나왔다.
처음 제출했던 코드는
import sys
input = sys.stdin.readline
n = int(input())
array = []
for i in range(n):
array.append(int(input()))
array.sort()
for i in range(len(array)):
print(array[i], end='\n')
어떻게 바꿔야할지 감이 잡히지 않아 찾아보니
append를 사용하게 되면 메모리 재할당이 이루어져 메모리를 효율적으로 활용할 수 없다고 한다.
또 리스트의 크기를 10000으로 제한해두는 것이 필요했다.
크기가 10000인 리스트의 각 값을 0으로 할당시켜놓고,
인덱스에 해당하는 값이 들어올 경우 +1을 해주고 나중에 1이 값으로 할당된 인덱스만 불러오면 되는 것이다.
바뀐 정답 코드는 다음과 같다.
import sys
n = int(sys.stdin.readline())
array = [0] * 10001
for i in range(n):
array[int(sys.stdin.readline())] += 1
for i in range(10001):
if array[i] != 0:
for j in range(array[i]):
print(i)
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 11053 가장 긴 증가하는 부분 수열 (파이썬 python) (0) | 2022.01.21 |
---|---|
[백준] 11652 카드 (파이썬 python) (0) | 2022.01.21 |
[백준] 10825 국영수 (파이썬 python) (0) | 2022.01.20 |
[백준] 10814 나이순 정렬 (파이썬 python) (0) | 2022.01.19 |
[백준] 11651 좌표 정렬하기 2 (파이썬 python) (0) | 2022.01.19 |