[백준/파이썬] 9465번 스티커 풀이

업데이트:



문제 정보


풀이

문제

2행 n열 스티커에서 인접 제약을 지키며 얻을 수 있는 최대 점수를 구하는 문제입니다.

코드

import sys; read = sys.stdin.readline

for T in range(int(read())):
    n = int(read())
    stickers = [list(map(int, read().split())) for _ in range(2)]

    dp = [[0]*n for _ in range(2)]
    dp[0][0] = stickers[0][0]
    dp[1][0] = stickers[1][0]

    if n > 0:
        dp[0][1] = dp[1][0] + stickers[0][1]
        dp[1][1] = dp[0][0] + stickers[1][1]

        for j in range(2, n):
            for i in range(2):
                dp[i][j] = max(stickers[i][j] + dp[(i+1)%2][j-2],
                               stickers[i][j] + dp[i][j-2],
                               stickers[i][j] + dp[(i+1)%2][j-1],
                               dp[i][j-1])
    print(max(dp[0][-1], dp[1][-1]))

설명

각 칸에서 가능한 이전 상태(대각선/한 칸 전/두 칸 전)를 고려해 DP로 최댓값을 누적합니다.



댓글남기기