백준 1149번 RGB거리 파이썬

박슬빈·2021년 9월 3일
0

문제

입력 , 출력

정답

import sys

input = sys.stdin.readline
n = int(input())
arr = [[0 for i in range(3)] for j in range(n)]
res = [[0 for i in range(3)] for j in range(n)]
for i in range(n):
    arr[i] = list(map(int, input().split()))
res[0][0] = arr[0][0]
res[0][1] = arr[0][1]
res[0][2] = arr[0][2]
res[1][0] = min(arr[0][1], arr[0][2]) + arr[1][0]
res[1][1] = min(arr[0][0], arr[0][2]) + arr[1][1]
res[1][2] = min(arr[0][0], arr[0][1]) + arr[1][2]
for i in range(1, n):
    res[i][0] = min(res[i - 1][1], res[i - 1][2]) + arr[i][0]
    res[i][1] = min(res[i - 1][0], res[i - 1][2]) + arr[i][1]
    res[i][2] = min(res[i - 1][0], res[i - 1][1]) + arr[i][2]
print(min(res[n - 1]))

설명

R G B 순서대로 arr[0][0 , 1 , 2]
선택을 했을경우에 최소값을 res에 넣어줌
1번 인덱스까지 초기값을 선택해주는데
r을 선택했을 경우에는 전에 g,b만 선택할 수 있기때문에
g,b중에 최솟값을 넣어주고
g를 선택했을 경우에는 전에 r,b만 선택할 수 있기때문에
r,b중에 최솟값을 넣어주고
b를 선택했을 경우에는 전에 r,g만 선택할 수 있기때문에
r,g중에 최솟값을 넣어준다
res[i-1] 번째에는 그 인덱스 기준 최솟값을 가지고있기때문에
res[i-1] 번째에 rgb중에 선택하여 넣은다음에
res[n-1] 번째에 있는 배열중에 가장작은 것을 고르면 정답..

후기

다른사람 코드를 안보고 짜긴했지만 아직 정확한 이해가 필요한것같다..
문제를 많이 풀어봐야할듯

profile
이것저것합니다

0개의 댓글