# 1149번 RGB 거리
# RGB 거리엔 N개의 집 1~N 순서대로
# 빨 초 파 중 하나
# 비용의 최소값 구하기
# 1번집의 색 != 2번집의 색
# N번집의 색은 N-1 번집의 색과 같지 않아야한다.
N = int(input())
# RGB
arr = [list(map(int,input().split())) for _ in range(N)]
INF = float('inf')
dp = [[INF] *3 for _ in range(N)]
for i in range(3):
dp[0][i] = arr[0][i]
for x in range(1,N):
for y in range(3):
for z in range(3):
if y != z:
dp[x][y] = min(dp[x][y],dp[x-1][z]+arr[x][y])
print(min(dp[N-1]))
처음엔 그냥 dfs를 이용해서 풀어볼려다가, 입력 N이 1000까지라, 3^1000은 시간초과가 날것 같아서 dp로 선회했다.
dp에서 제일 어려운건 동적프로그래밍을 저장할 공간을 설계하는 것 같다. 이 문제를 풀때에 어떻게하면, 이전위치의 저장정보와 최소값 저장할지 고민했었다.
그 해결방법으로 index를 이용했다. dp를 저장하는 y축 index가 동일하지않으면 된다는 점을 착안하여, dp를 설계했다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 1058 친구 (0) | 2021.01.14 |
---|---|
[BOJ] 10884 쉬운 계단 수 (0) | 2021.01.14 |
[BOJ] 12865 평범한 배낭 (0) | 2021.01.14 |
[BOJ] 1012 유기농 배추 (0) | 2021.01.13 |
[BOJ] 1010 다리 놓기 (0) | 2021.01.13 |