MapleStory Finger Point

[BOJ] #10989 - 수 정렬하기 3

2021. 6. 15. 01:31Problem Solving/Online Judge

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

 

** 문제 유형

  • 정렬

 

** 풀이

  1. 데이터의 개수가 최대 10,000,000개
    • 파이썬 2초당 20,000,000개의 연산 수행
    • 파이썬의 기본 정렬 라이브러리 사용시, O(nlogn)
  2. 수의 범위가 1 ~ 10,000 이므로 계수 정렬을 이용 -> O(n)
  3. 데이터의 개수가 많을 때 파이썬에서 sys.stdin.readline() 사용 (input() 보다 빠름)

 

+) 계수 정렬 (Counting Sort) 알고리즘

  • 배열의 인덱스를 특정한 데이터의 값으로 여기는 정렬 방법
    • 배열의 크기는 데이터의 범위를 포함할 수 있도록 설정
    • 데이터가 등장한 횟수를 카운트하여 배열에 저장
    • 데이터의 개수(배열의 값)만큼 인덱스를 출력

 

import sys

n = int(sys.stdin.readline())

array = [0] * 10001

for _ in range(n):
    num = int(sys.stdin.readline())
    array[num] += 1
    
for i in range(10001):
    if array[i] != 0:
        for j in range(array[i]):
            print(i)

 

 

 

 

'Problem Solving > Online Judge' 카테고리의 다른 글

[BOJ] #1074 - Z  (0) 2021.06.15
[BOJ] #2747 - 피보나치 수  (0) 2021.06.15
[BOJ] #11650 - 좌표 정렬하기  (0) 2021.06.14
[BOJ] #10814 - 나이순 정렬  (0) 2021.06.14
[BOJ] #1427 - 소트인사이드  (0) 2021.06.14