๐ ๋ฌธ์
๐ง ์์ด๋์ด
๋ฌธ์ ์ ๋ชฉ์ฒ๋ผ ์ต์ํ, ์ต๋ํ์ ์ฐ์ ์์ ํ 2๊ฐ๋ฅผ ์ด์ํ๋ ๋ฐฉ์์ ๋ ์ฌ๋ฆด ์ ์๊ณ ๋งค์ฐ ์ง๊ด์ ์ด๋ค.
ํ์ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ฏ๋ก ใ ใ ;;
์ค๋ณต์์๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํ์๊น์ง $$ ๋ชจ๋ O(Log N) $$ ์ผ๋ก ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ฐ๋ก TreeMap<Int,Int> ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๋, ๊ต์ฅํ ํจ์ API ๋ฅผ ์ ๊ณตํ๋ค. ์ฐ์ ์์ ํ๊ฐ root ๋ง ์ถ์ถํ๊ธฐ ํธํ๋ค๋ฉด
์ด ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ ์ฒ๋ผ ํ๋์ ๋ฐ์ดํฐ์ ์์์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ / ๋ฎ์ ๊ฐ์ ์ถ์ถํ ์ ์๋ค.
TreeMap, TreeSet ์
Binary Search Tree ๋ก ๊ตฌํ๋์ด ์์ผ๋ฏ๋ก
๋ชจ๋ ์ฐ์ฐ์ด O(Log N) ์ด๋ค.
๊ทผ๋ฐ firstEntry(), firstKey() ์ด๋ฐ๊ฑฐ ์๊ฐ๋ณต์ก๋ O(Log N) ๋ง์?
๐ Kotlin Code
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
private val MAX = 1
private val MIN = -1
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val numOfTC = br.readLine().toInt()
val sb = StringBuilder()
repeat(numOfTC){
val numOfOperation = br.readLine().toInt()
// ์ค๋ฆ์ฐจ์
val treeMap = TreeMap<Int,Int>(){key1, key2-> key1.compareTo(key2)}
for(i in 1 .. numOfOperation){
val str = br.readLine().split(" ")
val op = str.first()
val num = str.last().toInt()
when (op) {
"I" -> {
if(treeMap.containsKey(num)) {
treeMap[num] = treeMap[num]!!.plus(1)
} else {
treeMap[num] = 1
}
}
"D" -> {
if (treeMap.isEmpty()) continue
when (num) {
MAX -> {
val (num, cnt) = treeMap.lastEntry()
if (cnt == 1) treeMap.remove(num)
else treeMap[num] = (cnt - 1)
}
MIN -> {
val (num, cnt) = treeMap.firstEntry()
// unique value
if (cnt == 1) treeMap.remove(num)
else treeMap[num] = (cnt - 1)
}
}
}
}
}
if (treeMap.isEmpty()) sb.append("EMPTY\n")
else sb.append("${treeMap.lastKey()} ${treeMap.firstKey()}\n")
}
print(sb)
}
'Algorithm > Algorithm (๋ฌธ์ ํ์ด)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17835 ๋ฉด์ ๋ณด๋ ์น๋ฒ์ด๋ค (0) | 2022.11.18 |
---|---|
[๋ฐฑ์ค] 4375 1 (0) | 2022.11.17 |
[๋ฐฑ์ค] 1629 ๊ณฑ์ (0) | 2022.11.12 |
[๋ฐฑ์ค] 2295 ์ธ ์์ ํฉ (1) | 2022.11.05 |
[๋ฐฑ์ค] 18870 ์ขํ ์์ถ (0) | 2022.11.01 |