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
태그 : 정렬

 

 

설명

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

 

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

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

 

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

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

 

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

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

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

 

 

소스코드

 

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()를 넣어주면 됩니다.

 

 

후기

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

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

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

profile

Uknow's Lab.

@유노 Uknow

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