Post

[백준/코틀린] 30804번: 과일 탕후루

실버 2

링크

30804번: 과일 탕후루

풀이

두 포인터(l, r)를 이용해 두 종류 이하의 과일만 포함된 구간을 유지합니다.

r번째 과일을 추가했을 때
- 과일의 종류가 세 가지 이상이 되면 l을 이동시켜 구간을 축소하고,
- 두 가지 이하라면 r을 이동시켜 구간을 확장합니다.

코드

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.