[Kotlin/프로그래머스] 코딩테스트 연습 > 연습문제 > 명예의 전당 (1)

👀 문제

https://school.programmers.co.kr/learn/courses/30/lessons/138477

👊 도전

1. 설계

  1. 문제 설명대로 구현

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.PriorityQueue

class Solution {
fun solution(k: Int, score: IntArray): IntArray {
var answer = mutableListOf<Int>()
/**
* 내림차순 PriorityQueue를 만들고
* q.isEmpty or size < k면 s를 넣고 q[0]을 add
* 아니면
* q[0]<s면 q[0] add
* 아니면 s넣고 q[0] add
*/
val pq = PriorityQueue<Int>{o1, o2 -> o1.compareTo(o2)}

        score.forEach { s ->
            if (pq.isEmpty() || pq.size < k) {
                pq.offer(s)
                answer.add(pq.peek())
            } else {
                if (pq.peek() > s) {
                    answer.add(pq.peek())
                } else {
                    pq.poll()
                    pq.offer(s)
                    answer.add(pq.peek())
                }
            }
        }
        return answer.toIntArray()
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. PriorityQueue를 이용해 오름차순을 만든다
    • pq.size가 k 미만이라면 pq에 아이템 s를 넣고 pq.peek을 add한다.
    • k개가 존재할 경우 pq.peek이 s보다 크면 s는 큐에 추가될 수 없으므로 pq.peek을 add한다.
    • s가 더 크다면 pq.peek을 poll하고 s를 넣은 후 pq.peek을 add한다.

👏 해결 완료!