알고리즘 문제 풀이/Python

python 1149 RGB 거리

맛대 2022. 5. 1. 18:59

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

  • 앞 뒤 집과 색이 달라야 함, R G B 세가지 색을 사용하여 집을 색칠
  • 집을 하나 칠하고 그 전집과 색이 다르게만 칠하면 자연스럽게 완성
  • 최소 값을 구해야 하는데, 그 전집의 색, 지금까지의 값만 중요
  • DP를 이용하여 R,G,B색을 칠했을 경우 최소 비용을 누적하여 저장하는 형태
    • 현재 집을 R 선택했다면, 전집이 G,B일때 값을 비교하여 둘 중 최소인 것만 저장
def check(i):
    for j in range(3):              # 이번 집의 RGB 선택
        pay = total[i][j]            # 이번 집 색칠에 드는 비용
        temp = []
        for k in range(3):          # 전집 색 선택
            if k != j:              # 같은색 배제
                temp.append(dp[i-1][k]+pay)
        dp[i][j] = min(temp)        # 최소 비용을 dp에 기록    

N = int(input())        
dp = [[0]*3 for _ in range(N)]        # *3은 R,G,B 세가지 기록용 
total = [list(map(int,input().split())) for _ in range(N)]
for i in range(3):
    dp[0][i] = total[0][i]
for c in range(1,N):
    check(c)
print(min(dp[N-1]))

'알고리즘 문제 풀이 > Python' 카테고리의 다른 글

python 15650 N과 M(2)  (0) 2022.05.04
python 백준 1753 최단경로  (0) 2022.05.03
python 백준 2407 조합  (0) 2022.05.03
python 18511 큰 수 구성하기  (0) 2022.05.02
python 1043 거짓말  (0) 2022.05.01