백준

백준 1149 - RGB거리

황태건 2023. 5. 7. 18:57

https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

동적 계획법을 사용해 푸는 문제로

optimal substructure를 잘 구성하면 금방 풀 수 있는 문제이다.

 

- RGB 비용을 cost[n][3] 배열에 저장한다.

- sum[n][3] 배열을 생성한다.

    sum[i][color] : i번째 color 색 건물 까지의 건설 비용의 합

- cost[0]을 sum[0]에 복사한다 (table setup)

- 값이 계산된 i-1번째 행을 이용해 sum [i]행을 채운다. (table fill)

    color와 같지 않은 두 색깔 c1, c2에 대해

    sum[i][color] = min(sum[i-1][c1], sum[i-1][c2]) + cost[i][color]

 

cost

26 40 83
49 60 57
13 89 99

sum

  R G B
sum[0] 26 40 83
min(sum[0][c1], sum[0][c2]) 40 26 26
sum[1] 89 86 83
min(sum[1][c1], sum[1][c2]) 83 83 89
sum[2] 96 172 188

배운 내용 : optimal substructure은 1차원 배열이 아닐 수도 있다.

 

동적 계획법에서는 P[i]를 계산하기 위해

어떤 값들이 미리 계산되어 있어야 하는지를 판단해야 한다.

 

이번 문제에서는 현재 행에서의 최소 비용을 계산하기 위해

각 색깔마다 앞의 행까지의 최소 비용이 계산되어 있어야 하며,

따라서 substructure를 2차원 배열로 구성해야 한다.