[문제]
https://www.acmicpc.net/problem/1149
[풀이]
문제의 조건은 다음과 같다.
- 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
- N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
- i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.
결국 i번째는 i-1째 집의 색과 같지 않으면 된다.
예를 들어 i번째 색상이 빨강이라면, i -1번째는 파랑 또는 초록이 와야 한다.
i-1째의 최소 값의 색상을 구하여, i번째 색상을 더해준다.
최종적으로 N번째 집 중 가장 작은 값을 출력해주면 된다.
[코드]
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.min
lateinit var rgb : Array<MutableList<Int>>
var rgbPair = listOf<Pair<Int,Int>>(Pair(1,2), Pair(0,2), Pair(0,1))
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val N = br.readLine().toInt()
rgb = Array(N + 1){ mutableListOf() }
rgb[0] = MutableList(3) {0}
repeat(N)
{
i ->
rgb[i + 1] = br.readLine().split(" ").map{it.toInt()} as MutableList<Int>
}
for(i in 1..N)
{
for(j in 0 until 3)
{
rgb[i][j] = min(rgb[i-1][rgbPair[j].first], rgb[i-1][rgbPair[j].second]) + rgb[i][j]
}
}
bw.write(min(min(rgb[N][0],rgb[N][1]),rgb[N][2]).toString())
bw.flush()
bw.close()
}
'백준 > DP' 카테고리의 다른 글
백준 [3687] kotlin (0) | 2023.01.16 |
---|---|
백준 [1446] kotlin (0) | 2023.01.12 |
백준 [15989] kotlin (0) | 2023.01.11 |
백준 14501 [kotlin] (0) | 2022.07.22 |
백준 1309 [kotlin] (0) | 2022.07.09 |