📚 문제
링크: https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
💡 접근법
계수 정렬 알고리즘을 이용하여 구현하였다.
계수 정렬이란?
각 원소들 간의 비교 없이, 크기를 기준으로 개수를 세어 정렬하는 방법이다.
💻 코드
1) 전체 코드
import sys
N = int(sys.stdin.readline())
count = [0] * 10001
for _ in range(N):
count[int(sys.stdin.readline())] += 1
for i, c in enumerate(count):
for _ in range(c):
print(i)
2) 해설
(1) 패키지 Import
import sys
파이썬 내장 함수인 input()보다 빠르게 값을 입력받기 위해 sys 라이브러리를 사용하였다.
(2) 입력받기
N = int(sys.stdin.readline())
수의 개수(N)을 입력받고 int로 형변환하였다.
(3) 계수 정렬 구현
count = [0] * 10001
for _ in range(N):
count[int(sys.stdin.readline())] += 1
입력받은 리스트 내에 속해있는 모든 원소를 인덱스로 가지는 count 리스트를 생성한다.
이때 입력으로 들어올 수 있는 최댓값 + 1을 리스트의 크기로 지정하고 0으로 초기화한다.
값을 입력받음과 동시에 count 리스트에서 입력받은 값을 인덱스로 갖는 요소의 값을 1 증가시킨다.
(4) 출력하기
for i, c in enumerate(count):
for _ in range(c):
print(i)
count 리스트를 순차적으로 순회하면서 접근한 요소의 값만큼 해당 인덱스를 출력한다.
✅ 정답 확인
포스팅한 내용에 대한 조언/지적/피드백 모두 환영입니다!
읽어주셔서 감사합니다^.^
'Algorithm > Baekjoon' 카테고리의 다른 글
[DFS] 백준 #13023 친구 관계 파악하기 - Python (2) | 2023.10.09 |
---|---|
[DFS] 백준 #2023 신기한 소수 찾기 - Python (1) | 2023.10.09 |
[DFS] 백준 #11724 연결 요소의 개수 구하기 - Python (0) | 2023.10.09 |
[정렬] 백준 #11399 ATM 인출 시간 계산하기 - Python (0) | 2023.10.01 |
[정렬] 백준 #1427 소트인사이드 - Python (0) | 2023.10.01 |