반응형
[백준 1655번] 가운데를 말해요 - Kotlin
https://www.acmicpc.net/problem/1655
문제
- 백준이는 동생에게 "가운데를 말해요" 게임을 가르쳐주고 있다.
- 백준이가 정수를 하나씩 외칠때마다 동생은 지금까지 백준이가 말한 수 중에서 중간값을 말해야 한다.
- 만약, 그동안 백준이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다.
- 예를 들어 백준이가 동생에게 1, 5, 2, 10, -99, 7, 5를 순서대로 외쳤다고 하면, 동생은 1, 1, 2, 2, 2, 2, 5를 차례대로 말해야 한다.
- 백준이가 외치는 수가 주어졌을 때, 동생이 말해야 하는 수를 구하는 프로그램을 작성하시오
입력
- 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다.
- N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다.
- 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다.
- 정수는 -10,000보다 크거나 같고, 10,000보다 작거나 같다
출력
- 한 줄에 하나씩 N줄에 걸쳐 백준이의 동생이 말해야 하는 수를 순서대로 출력한다
풀이
import java.util.PriorityQueue
private class Solution1655 {
private val maxQueue = PriorityQueue<Int>()
private val minQueue = PriorityQueue(Comparator<Int> { o1, o2 -> - (o1 - o2) })
fun solution(num: Int): String {
val stringBuilder = StringBuilder()
when {
minQueue.isEmpty() -> {
minQueue.add(num)
stringBuilder.append("${num}\n")
}
maxQueue.isEmpty() -> {
if (minQueue.peek() > num) {
maxQueue.add(minQueue.poll())
minQueue.add(num)
} else {
maxQueue.add(num)
}
stringBuilder.append("${minQueue.peek()}\n")
}
else -> {
val min = minQueue.peek()
val max = maxQueue.peek()
when {
num > max -> {
if (minQueue.size <= maxQueue.size) {
maxQueue.poll()
minQueue.add(max)
}
maxQueue.add(num)
}
num in min .. max -> when {
minQueue.size > maxQueue.size -> maxQueue.add(num)
else -> minQueue.add(num)
}
else -> {
if (minQueue.size > maxQueue.size) {
minQueue.poll()
maxQueue.add(min)
}
minQueue.add(num)
}
}
stringBuilder.append("${minQueue.peek()}\n")
}
}
return stringBuilder.toString()
}
}
private fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val solution1655 = Solution1655()
repeat(br.readLine().toInt()) {
bw.append(solution1655.solution(br.readLine().toInt()))
}
bw.flush()
br.close()
bw.close()
}
반응형
'Software > 백준' 카테고리의 다른 글
[백준 12015번] 가장 긴 증가하는 부분 수열 2 - Kotlin (0) | 2024.07.07 |
---|---|
[백준 1644번] 소수의 연속합 - Kotlin (1) | 2024.07.05 |
[백준 1786번] 찾기 - Kotlin (0) | 2024.05.20 |
[백준 1005번] ACM Craft - Kotlin (0) | 2024.05.20 |
[백준 14003번] 가장 긴 증가하는 부분 수열 5 - Kotlin (0) | 2024.05.20 |