10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
✏️ 1번째 코드 - 메모리초과(실패)
# sorted 사용
N = int(input())
lis = []
for _ in range(N):
num = int(input())
lis.append(num)
for number in sorted(lis):
print(number)
✏️ 2번째 코드 - 메모리초과(실패)
# input() -> sys.stdin.readline() 변경
import sys
N = int(sys.stdin.readline())
lis = []
for _ in range(N):
num = int(sys.stdin.readline())
lis.append(num)
for number in sorted(lis):
print(number)
✏️ 3번째 코드 - 성공
# 계수정렬 활용
import sys
N = int(sys.stdin.readline())
nlist = [0]*(10000 + 1)
for _ in range(N):
nlist[int(sys.stdin.readline())] += 1
for i in range(len(nlist)):
if nlist[i] != 0:
for num in range(nlist[i]):
print(i)
✏️ 풀이
- 입력받는 리스트 nlist의 길이를 고정한다.
- 숫자입력될때마다 그 숫자에 해당하는 nlist의 인덱스의 갑을 1 증가시킨다.
ex. 2 2 2 3 1 이렇게 입력한다면
nlist=[0,1,3,1] # 해당숫자 인덱스랑 입력값 일치시키기위해 nlist길이를 입력값+1만큼 정해놨던것.
- nlist를 순회하며 출력하는데 값이 0이면 입력한적 없다는것이므로 0이아닐때만 for 돌면서 해당 '인덱스'값을 출력
'백준' 카테고리의 다른 글
[백준][python] 1427 소트인사이드 문제 (0) | 2023.06.26 |
---|---|
[백준][python]15969 행복 문제 (0) | 2023.06.26 |
[백준][python][구현] 4673 셀프넘버 문제 (0) | 2023.06.08 |
[백준][python][완전탐색] 7568 덩치 문제 (5) | 2023.05.31 |
[백준][python][재귀] 10870 피보나치 수 5 문제 (0) | 2023.05.31 |