반응형
문제 링크
https://www.acmicpc.net/problem/10989
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1
10
5
2
3
1
4
2
3
5
1
7
예제 출력 1
1
1
2
2
3
3
4
5
5
7
틀린 풀이
import sys
n = int(sys.stdin.readline().rstrip())
array = []
for _ in range(n):
array.append(int(sys.stdin.readline().rstrip()))
for _ in range(n):
for i in range(n - 1):
if array[i] > array[i + 1]:
array[i], array[i + 1] = array[i + 1], array[i]
for number in array:
print(number)
이유
- 메모리 초과
- 메모리를 줄이려고 버블 정렬을 써가며 별짓을 다 했으나, 10,000,000 크기의 리스트를 줄일 수 없어 시실패하였다.
맞은 풀이1
import sys
n = int(sys.stdin.readline().rstrip())
count_array = [0] * 10001
for i in range(n):
count_array[int(sys.stdin.readline().rstrip())] += 1
for i in range(10001):
if count_array[i] != 0:
for j in range(count_array[i]):
print(i)
접근 방식
- 계수 정렬을 사용!
- 입력값의 범위가 10,000 이하이므로, 리스트의 크기가 10,000,000에서 10,000으로 줄어든다.
정리
- 계수 정렬의 존재와 사용 방법을 기억하자.
반응형
'코딩테스트' 카테고리의 다른 글
코딩테스트 언어 선택 고민 Python vs Java (0) | 2022.12.26 |
---|---|
백준 2108번 풀이 - 파이썬(Python) (구현, 수학, 정렬) (0) | 2022.09.12 |
백준 1929번 풀이 - 파이썬(Python) (수학, 정수론, 에라토스테네스의 체) (0) | 2022.09.11 |
백준 1874번 풀이 - 파이썬(Python) (자료구조, 스택) (0) | 2022.09.10 |
백준 1654번 풀이 - 파이썬(Python) (이분탐색) (0) | 2022.09.10 |