17404: RGB거리 2

ewillwin·2023년 4월 26일
0

Problem Solving (BOJ)

목록 보기
17/230

import sys

N = int(input()); rgb = []
for _ in range(N):
    rgb.append(list(map(int, sys.stdin.readline()[:-1].split(' '))))

result = 1000*1000+1
for f in range(3):
    dp = [[0, 0, 0] for _ in range(N)]; dp[0] = [1001, 1001, 1001]; dp[0][f] = rgb[0][f]
    for i in range(1, N):
        dp[i][0] += min(dp[i-1][1], dp[i-1][2]) + rgb[i][0]
        dp[i][1] += min(dp[i-1][0], dp[i-1][2]) + rgb[i][1]
        dp[i][2] += min(dp[i-1][0], dp[i-1][1]) + rgb[i][2]
    
    dp[N-1][f] = 1000*1000+1
    if min(dp[N-1]) < result: result = min(dp[N-1])

print(result)
  • 1번 집의 색과 N번 집의 색이 같지 않아야 한다는 조건을 처리해줘야함
  • -> for문을 3번 돌며
    1번 집의 색이 빨강일 때 -> N번 집의 색은 초록 or 파랑
    1번 집의 색이 초록일 때 -> N번 집의 색은 빨강 or 파랑
    1번 집의 색이 파랑일 때 -> N번 집의 색은 빨강 or 초록
    이 되도록 dp[N-1]에서 1번 집의 색을 주어진 조건에서의 최대값 (1000 * 1000 + 1)로 갱신시킴
    또한, 1번 집의 색을 임의로 설정해주기 위해 dp[0] = [rgb[0][f], 1001, 1001]이런식으로 설정
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글