Published:
Updated:

  • DP를 제대로 공부하기 전에 풀려고 하니까 너무 어려웠다.


Solution

import sys
from typing import List


def solution(nums_list: List[List[int]]) -> List[int]:
    # 각각 처리한 행까지의 최솟값, 최댓값을 저장하는 리스트
    min_list, max_list = [0, 0, 0], [0, 0, 0]

    for nums in nums_list:
        min_list = [nums[0] + min(min_list[:2]),
                    nums[1] + min(min_list),
                    nums[2] + min(min_list[1:])]

        max_list = [nums[0] + max(max_list[:2]),
                    nums[1] + max(max_list),
                    nums[2] + max(max_list[1:])]

    return [max(max_list), min(min_list)]


N = int(sys.stdin.readline().rstrip())
nums_list: List[List[int]] = []
for _ in range(N):
    nums_list.append(list(map(int, sys.stdin.readline().rstrip().split())))

print(*solution(nums_list))


Reference

Leave a comment