👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42628?language=kotlin
👊 도전
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
32
33
34
35
36
37
38
39
40
import java.util.*
class Solution {
fun solution(operations: Array<String>): IntArray {
val answer = IntArray(2)
/*
1. 우선순위 큐 오름차순, 내림차순 2개 선언
2. i면 둘 다 삽입
3. d 1, -1 이면 두 큐에서 해당 값 존재하면 삭제
4. 완료후 내림차순[0], 오름차순[0] 리턴
*/
val maxQueue = PriorityQueue<Int>(kotlin.Comparator { o1, o2 -> o2.compareTo(o1) })
val minQueue = PriorityQueue<Int>(kotlin.Comparator { o1, o2 -> o1.compareTo(o2) })
operations.forEach { oper ->
val split = oper.split(" ")
val num = split[1].toInt()
when (split[0]) {
"I" -> {
maxQueue.offer(num)
minQueue.offer(num)
}
"D" -> {
if (num == 1) {
val maxInt = maxQueue.poll()
minQueue.remove(maxInt)
} else {
val minInt = minQueue.poll()
maxQueue.remove(minInt)
}
}
}
}
if (maxQueue.isNotEmpty()) answer[0] = maxQueue.peek()
if (minQueue.isNotEmpty()) answer[1] = minQueue.peek()
return answer
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 우선순위 큐 두 개를 사용한다
- 오름차순으로 정렬하는 것 하나, 내림차순 하나 사용한다.
- insert는 모든 큐에 삽입, remove는 1, -1에 따라 최대, 최솟값을 찾아 각 큐에서 제거한다.
- operation 수행 후 각 큐에서 최대, 최솟값을 리턴한다.