Post

[백준/코틀린] 1149번: RGB거리

실버 1

링크

1149번: RGB거리

풀이

dp[i][C]: i번째 집을 색 C로 칠했을 때의 최소 누적 비용

i번째 집을 색 C로 칠하려면,
i-1번째 집은 반드시 C가 아닌 두 색 중 하나여야 합니다.

따라서 dp[i][C]
입력으로 받은 i번째 집의 색칠 비용에
dp[i−1][~C] 중 최솟값을 더한 값으로 계산됩니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const val R = 0
const val G = 1
const val B = 2 

fun main() {
    val n = readln().toInt()
    val dp = List(n + 1) { MutableList(3) { 0 } }

    for (i in 1..n) {
        val (r, g, b) = readln().split(" ").map { it.toInt() }

        dp[i][R] = r + minOf(dp[i - 1][G], dp[i - 1][B])
        dp[i][G] = g + minOf(dp[i - 1][R], dp[i - 1][B])
        dp[i][B] = b + minOf(dp[i - 1][R], dp[i - 1][G])
    }

    println(dp[n].minOrNull())
}

This post is licensed under CC BY 4.0 by the author.