Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/11931

 

11931번: 수 정렬하기 4

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

난이도 : 실버 5
태그 : 정렬

 

 

1. 설명

그동안의 수 정렬하기가 오름차순 이였다면, 이번엔 내림차순 정렬입니다.

 

이번엔 조금 특이하게 정렬을 해봤는데요.

PrioryQueue(우선순위 큐)를 사용해 정렬을 해보았습니다.

 

우선순위 큐는 말 그대로 원소값에 따라 우선순위를 갖는 큐로써,

꽤 자주 사용되는 자료구조 입니다.

 

우선순위 큐는 원소가 삽입될때 마다 정렬이 되며,

우선순위 큐를 만들 때, 정렬조건을 내림차순으로 주어,

하나씩 원소를 삽입하며, 우선순위 큐가 모두 빌 때 까지 출력하면 됩니다.

 

 

2. 소스코드

 

<kotlin />
import java.util.Collections import java.util.PriorityQueue fun main() = with(System.`in`.bufferedReader()) { val n = readLine().toInt() val pq = PriorityQueue<Int>(Collections.reverseOrder()) repeat(n) { pq.add(readLine().toInt()) } val sb = StringBuilder() while (pq.isNotEmpty()) { sb.append("${pq.poll()}\n") } print(sb) }

PriortyQueue를 내림차순으로 지정하는 방법은 생성할 때 Collections.reverseOrder()를 넣어주면 됩니다.

 

 

3. 후기

해당 문제에서 굳이 우선순위 큐를 사용해 풀어야 할 이유는 없습니다.

버블정렬, 삽입정렬, 퀵소트 같은 정렬 알고리즘 말고 뭔가 신박하게 풀어볼까 하는 생각에,

다른 문제에서 우선순위 큐를 사용해 정렬하여 풀었던 경험이 떠올라 우선순위 큐를 사용해 풀이해보았습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.