• 방법 1. 틀림.. ** 메모리 초과 **
n = int(input())
nums = []
for _ in range(n):
nums.append(int(input())) # 메모리 재할당 -> 효율적 사용 X
nums.sort()
for i in nums:
print(i)
• 방법 2. 정답!!
import sys
input = sys.stdin.readline
n = int(input())
nums = [0] * 10001 # 0 ~ 10000
for _ in range(n):
nums[int(input())] += 1 # 입력받은 값을 인덱스로 가지는 자리에 +1
# 1을 3번 입력받으면 numa[1] = 3 이 됨
for i in range(10001):
if nums[i] != 0:
for j in range(nums[i]): # 저장된 갯수 모두 출력
print(i)
• 리스트.append()는 메모리를 재할당하는 과정에서 비효율적이게 된다.
• nums의 모든 인덱스에 0 값을 넣어두고
• 입력받은 값을 인덱스로 가지며 +1을 함으로써 해당 값(인덱스)을 몇번 입력받았는지 체크한다.
• 0이 아닌(입력받은 값이 있는) 인덱스(값)을 찾아 들어있는 갯수만큼 반복문을 통해 출력한다.
• 만약 내부 반복문(for j in range(nums[i])가 없으면 1이 3번 입력되었어도 하나만 출력된다.