https://coderun.yandex.ru/problem/jolly-delivery/description Сложная

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.min

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val s = reader.readLine() ?: ""
    if (s.isEmpty()) {
        writer.write("1")
        writer.newLine()
        writer.flush()
        return
    }

    var dpUp = 0
    var dpDown = Int.MAX_VALUE / 2

    for (ch in s) {
        val u = if (ch == '1' || ch == '3') 1 else 0
        val d = if (ch == '2' || ch == '3') 1 else 0
        val newUp = min(dpUp + u, dpDown + min(d + 1, u + 1))
        val newDown = min(dpDown + d, dpUp + min(u + 1, d + 1))
        dpUp = newUp
        dpDown = newDown
    }

    writer.write(dpDown.toString())
    writer.newLine()
    writer.flush()
}