- Date : 2020.11.3(화)
- Time : 30분
- RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
- 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
- N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
- i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.
for i in range(1, len(arr)):
arr[i][0] = min(arr[i - 1][1], arr[i - 1][2]) + arr[i][0]
# 빨간색으로 칠했을 때 최소값
arr[i][1] = min(arr[i - 1][0], arr[i - 1][2]) + arr[i][1]
# 초록색으로 칠했을 때 최소값
arr[i][2] = min(arr[i - 1][0], arr[i - 1][1]) + arr[i][2]
# 파랑색으로 칠했을 때 최소값
print(min(arr[N - 1][0], arr[N - 1][1], arr[N - 1][2]))
: 만약 i를 빨간색으로 칠했을 때를 본다면 (i를 빨간색으로 칠하는 비용) + (i-1를 초록색으로 칠하는 비용 or i-1를 파란색으로 칠하는 비용 중 최소값) 일 것이다. 이런 빨강,초록,파랑 경우의 수를 3개지를 구해주면서 맨 뒤에 쌓이게한다. 그리고 마지막 열에서 가장 작은값을 가져오면 된다.