👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/138477
👊 도전
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. 설명
- 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한다.