문제설명
길가의 집들에 페인트를 칠할 때 2집이 연속으로 같은 색상을 사용하지 않고 칠하려면 최소한 얼마의 비용이 필요한지 출력하는 문제입니다.(각 집마다 색에 따른 비용이 다릅니다.)
작동 순서
1. 집의 개수를 입력받습니다.
2. 각 집별로 페인트칠에 필요한 색깔별 비용을 입력받습니다.
3. 현재 집의 색과 다른 두 색으로 이전 집을 칠하는데 필요한 비용들 중 더 적은 비용을 현재까지의 비용들에 합해줍니다.
4. 마지막 집에 왔을 경우 3가지 색들중 가장 비용이 적은 경우를 저장합니다.
5. 최소한의 비용을 출력합니다.
소스코드
import sys
price = []
dp = []
minSum = 1000000
for i in range(int(sys.stdin.readline())):
price.append(list(map(int, sys.stdin.readline().split())))
for i in range(len(price)):
dp.append([])
for j in range(3):
dp[i].append(price[i][j])
if i > 0:
if j == 0:
dp[i][j] += min(dp[i-1][1], dp[i-1][2])
elif j == 1:
dp[i][j] += min(dp[i-1][0], dp[i-1][2])
else:
dp[i][j] += min(dp[i-1][0], dp[i-1][1])
if i == len(price)-1:
minSum = min(minSum, dp[i][j])
print(minSum, end="")
후기
문제를 푸는 것보다 설명하는게 더 어렵네요... 아직 이해가 많이 부족한것 같습니다.