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 |