백준 10989 파이썬

Ddudduu·2023년 3월 3일
0

백준 10989

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

풀이

그냥 sort 를 쓰면 메모리 초과가 난다.
메모리 제한이 8MB 라서 이 경우에는 계수 정렬 을 사용해야 한다.

계수 정렬은 간단히 말하면, 해당 값이 몇 번 들어왔는지 저장해놨다가 출력하는 방법이다.

import sys
num = int(input())
arr = [0] * 10001

for i in range(num):
  inputNum = int(sys.stdin.readline())
  arr[inputNum] += 1

for i in range(len(arr)):
  if arr[i] != 0:
    for j in range(arr[i]):
        print(i)
  1. 0 으로 차있는 배열 arr 을 만든다. (arr 크기 : 입력 값 범위만큼)
  2. arr[입력 값] 의 값을 하나씩 더해준다. (해당 값이 몇 번 입력됐는지 저장)
  3. arr 을 돌면서 0이 아닌 경우,
    arr[index] 를 index 번 만큼 출력한다.

메모리가 제한된 경우에는 계수 정렬을 이용하자!

profile
Android

0개의 댓글