[BOJ] Q1149 RGB 거리

Question

Language: Python

Difficulty: Silver 1

각 집에 대해서는 서로 인접한 집끼리는 색깔이 같아서는 안된다. 색깔이 같지 않은 조건 하에 R,G,B 색깔을 취했을 때 가지는 비용을 최소하면 된다.

      R G B
26 40 83 26 40 83
49 60 57 40+49 26+60 26+57
13 89 99 26+57+13 26+57+89 26+60+99

i번째 집이 있다고 가정할때, 만약 i번째 집을 R로 칠하는 경우. 그러면 data[i][Red]+min(data[i-1][Green],data[i-1][Blue]) 만약 i번째 집을 G로 칠하는 경우 그러면 data[i][Green]+min(data[i-1][Red],data[i-1][Blue]) 만약 i번째 집을 B로 칠하는 경우 그러면 data[i][Blue]+min(data[i-1][Red],data[i-1][Green])

이와 같이 구할 수 있다.

각 집별로 RGB 거리를 구해서 맨 마지막 집의 최소 비용을 택하면 된다.

Solution

from math import inf
def solution():
    dp=[[inf] * 3 for _ in range(houses)]
    dp[0]=paint_costs[0]
    for i in range(1,houses):
        dp[i][0]=min(dp[i-1][1],dp[i-1][2]) + paint_costs[i][0]
        dp[i][1]=min(dp[i-1][0],dp[i-1][2]) + paint_costs[i][1]
        dp[i][2]=min(dp[i-1][0],dp[i-1][1]) + paint_costs[i][2]

    return min(dp[houses-1])

if __name__ == "__main__":
    houses=int(input())
    paint_costs=[]
    for _ in range(houses):
        paint_costs.append(list(map(int,input().split())))
    print(solution())

댓글남기기