[백준] 1149 - RGB 거리

김영민·2024년 7월 31일
0

코딩테스트

목록 보기
11/32

코드

N = int(input())

arr = []

for _ in range(N):
    a,b,c = map(int,input().split(" "))
    arr.append([a,b,c])

dp = [[0,0,0] for _ in range(N)]

dp[0] = arr[0]

for i in range(1,N):
    dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + arr[i][0]
    dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + arr[i][1]
    dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + arr[i][2]

print(min(dp[-1]))

풀이

  • 결국 인접하는 층만 다른 색이면 됨.
  • 밑에가 빨강이라면, 바로 위층은 초록과 파랑 중 작은 값으로 해야 최소일 것이다.
  • 밑에가 빨강일 때, 초록일 때, 파랑일 때를 구하면 된다.
  • 반복하면 가장 밑에서 최소인 값을 구하면 된다.

0개의 댓글