haju__log
[python][백준/BOJ] 10989번 : 수 정렬하기 3 (메모리 초과 해결) 본문
반응형
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
▶ 메모리 초과 난 코드
- 빈 리스트를 만들어 입력값을 하나씩 append 해 준 후, 반복문을 돌며 정렬된 리스트 값을 출력함
import sys
n=int(sys.stdin.readline())
nlist=[]
for _ in range(n):
tmp=int(sys.stdin.readline())
nlist.append(tmp)
nlist.sort()
for i in range(n):
print(nlist[i])
✅ 최종 코드
import sys
n=int(sys.stdin.readline())
nlist=[0]*10000
for _ in range(n):
tmp=int(sys.stdin.readline())
nlist[tmp-1]+=1
for i in range(10000):
if nlist[i]!=0:
for j in range(nlist[i]):
print(i+1)
✅ 문제 풀이
- 계수정렬을 사용함 (위의 코드처럼 짜면, 자동으로 정렬이 된다.)
- 입력 값은 10,000개의 작거나 같은 자연수가 주어지며, 중복이 가능하다는 것. 따라서, nlist를 빈 리스트로 만드는 것이 아니라, [0]*10000 으로 초기화해줌
- 계수정렬을 이용하면 메모리 초과는 해결되나 시간 초과 문제가 발생할 수 있음
- 시간 초과 해결은 input() 대신에 앞으로 sys.stdin.readline()을 사용하자!
반응형
'BOJ_백준' 카테고리의 다른 글
[python][백준/BOJ] 2750번 : 수 정렬하기 (0) | 2023.07.18 |
---|---|
[python][백준/BOJ] 1373번 : 2진수 8진수 (0) | 2023.07.11 |
[python][백준/BOJ] 10815번 : 숫자 카드 (0) | 2023.06.12 |
[python][백준/BOJ] 1934번 : 최소공배수 (0) | 2023.03.10 |
[python][백준/BOJ] 10988번 : 팰린드롬인지 확인하기 (0) | 2023.03.10 |