본문 바로가기
Problem Solving/Dynamic Programming

[다이나믹 프로그래밍] 백준 2096번: 내려가기 / 골드 4

by ggyongi 2021. 8. 13.
반응형

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

 

2096번: 내려가기

첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다.

www.acmicpc.net

import sys
n = int(sys.stdin.readline())

max_dp = list(map(int, sys.stdin.readline().split()))
min_dp = max_dp

for i in range(1, n):
    a, b, c = map(int, sys.stdin.readline().split())

    na1 = a + max(max_dp[0], max_dp[1])
    nb1 = b + max(max_dp[0], max_dp[1], max_dp[2])
    nc1 = c + max(max_dp[1], max_dp[2])
    max_dp = [na1, nb1, nc1]

    na2 = a + min(min_dp[0], min_dp[1])
    nb2 = b + min(min_dp[0], min_dp[1], min_dp[2])
    nc2 = c + min(min_dp[1], min_dp[2])
    min_dp = [na2, nb2, nc2]

print(max(max_dp), min(min_dp))

dp로 풀 수 있는 문제다.

앞에서부터 모든 경우를 조사해나가면 경우의수가 기하급수적으로 커지기 때문에

현 단계를 기준으로 이전 단계의 행 중 적절한 값을 취하는 형태로 나아가야 한다. 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글