[백준/코틀린] 30804번: 과일 탕후루
실버 2
링크
풀이
두 포인터(l, r)를 이용해 두 종류 이하의 과일만 포함된 구간을 유지합니다.
(l, r) 구간에 과일이 두 종류 이하라면 r을 이동시켜 구간을 확장하고,
과일의 종류가 세 가지 이상이 되면 l을 이동시켜 구간을 축소합니다.
위 과정을 반복하며, 두 종류 이하의 과일로 이루어진 구간 중 가장 긴 구간의 길이를 구합니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fun main() {
val n = readln().toInt()
val fruits = readln().split(" ").map { it.toInt() }
val fruitCount = IntArray(10)
var ans = 0
var l = 0
var r = 0
while (r < n) {
if (fruitCount[fruits[r]] == 0 && fruitCount.count { it > 0 } == 2) {
fruitCount[fruits[l++]]--
} else {
ans = maxOf(ans, r - l + 1)
fruitCount[fruits[r++]]++
}
}
println(ans)
}
This post is licensed under CC BY 4.0 by the author.