백준|1149번|RGB거리

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
84/136

문제설명
길가의 집들에 페인트를 칠할 때 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="")

후기
문제를 푸는 것보다 설명하는게 더 어렵네요... 아직 이해가 많이 부족한것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글