3
26 40 83
49 60 57
13 89 99
1번 집의 최솟값은 26, 2번 집의 최솟값은 49. 3번 집을 13으로 선택한다고 하면 답은 되는데, 이 경우를 어떻게 다 구하지? 내가 생각한 풀이법은 O(NN)이 된다.
이게 어떻게 DP랑 연관이 되는 건진 전혀 모르겠다🫡 앞에 계산된 값에 영향을 받으면 DP를 하면 되는 건가.
집이 1개.
1
26 40 83
0 1 2
26 40 83
집이 2개.
2
26 40 83
49 60 57
0 1 2
26 40 83
min(40,83) + R / min(26,83) + G / min(26,40) + B
집이 3개.
3
26 40 83
49 60 57
13 89 99
0 1 2
26 40 83
min(40,83) + R / min(26,83) + G / min(26,40) + B
min(앞집 G, 앞집 B) + R / ...
DP[i][색] = min(DP[i-1][다른 색], DP[i-1][또 다른 색]) + 색
점화식을 생각해낸 나에게 칭찬의 박수🙌
import sys
input = sys.stdin.readline
COLOR_SIZE = 3
HOUSE_MAX_SIZE = 1001
def getMinPrice() -> int:
DP = [[0 for _ in range(COLOR_SIZE)] for _ in range(HOUSE_MAX_SIZE)]
DP[1][0] = colors[1][0]
DP[1][1] = colors[1][1]
DP[1][2] = colors[1][2]
for house in range(2, houses+1):
DP[house][0] = min(DP[house-1][1], DP[house-1][2]) + colors[house][0]
DP[house][1] = min(DP[house-1][0], DP[house-1][2]) + colors[house][1]
DP[house][2] = min(DP[house-1][0], DP[house-1][1]) + colors[house][2]
return min(DP[houses])
houses = int(input().rstrip())
colors = [[0, 0, 0]] + [list(map(int, input().rsplit()))
for _ in range(houses)]
print(getMinPrice())