본문 바로가기

코딩테스트(python)/백준

백준 10989번 파이썬

반응형

1. 문제

2. 설명

카운팅 정렬은 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을때 사용 가능하다 .

이 문제의 경우에는 문제에 숫자의 범위가 10000까지 라고 정의되어있이 때문에 카운팅 정렬을 사용할 수 있다.

값끼리의 비교가 아닌, 값의 빈도수를 저장하여 정렬하므로 속도도 매우 빠르다.

시간 복잡도는 O(N+K) 이다. -> k :  입력받은 수 중 max 값


카운팅 정렬 알고리즘

1. 숫자의 범위만큼 값이 0인 배열 을 만들어 놓는다.

여기서 주의할 점!

N의 범위는 10000이지만 배열의 인덱스는 0부터 시작하기 때문에 N이 10000일 경우를 대비하여  10001 개로 만들어줘야 한다.

2. x를 입력받고, x에 해당하는 인덱스에 1을 더해주며 각 x의 빈도수를 count 배열에 저장해준다.

3. for문을 돌며 저장된 i의 빈도수 만큼 i를 출력해준다. 

3. 코드

import sys

n = int(input())

count = [0]*10001

for _ in range(n):
    x = int(sys.stdin.readline())
    count[x] += 1

for i in range(len(count)):
    for j in range(count[i]):
        print(i)

평소 수를 정렬할 때 수끼리의 비교 또는 sort 내장 함수를 사용하였는데,

이번 문제를 통해 카운팅 정렬을 배웠다.

처음엔 익숙치 않아 이해하는 것이 까다로울 수 있지만, 수의 범위가 정해지면 정렬할 때 사용하기 매우 편리할 것 같다!

반응형

'코딩테스트(python) > 백준' 카테고리의 다른 글

백준 1427번 파이썬  (0) 2022.09.13
백준 20305번 파이썬  (0) 2022.09.13
백준 2751번 파이썬  (0) 2022.09.12
백준 2750번 파이썬  (0) 2022.09.12
백준 11829번 파이썬  (0) 2022.09.12