1149 RGB거리

정민용·2023년 2월 23일

백준

목록 보기
83/286

문제

RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.

집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.

  • 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
  • N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
  • i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.
import sys

input = lambda: sys.stdin.readline().strip()

n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]

d = [[0 for _ in range(3)] for _ in range(n)]
d[0] = [arr[0][i] for i in range(3)]

for i in range(1, n):
  # i번째 집의 색 R
  d[i][0] = min(d[i - 1][1], d[i - 1][2]) + arr[i][0]
  # i번째 집의 색 G
  d[i][1] = min(d[i - 1][0], d[i - 1][2]) + arr[i][1]
  # i번째 집의 색 B
  d[i][2] = min(d[i - 1][0], d[i - 1][1]) + arr[i][2]

print(min(d[i]))

백준 1149 RGB거리

0개의 댓글