개발

[백준] 9465 스티커 (파이썬) 본문

알고리즘/문제

[백준] 9465 스티커 (파이썬)

쇼팽리스트 2022. 7. 20. 13:02

어느 정도 이런 비슷한 문제를 푸니까 감이 좀 잡힌거 같습니다.
dp는 해당 위치에 얻을 수 있는 최대 값을 저장하는 리스트입니다.
문제에서 선택지가 해당 위치에 있는 스티커를 뗀다와 떼지 않고 넘어간다가 있는데
떼는 경우 나의 이전 위치의 대각선에 있는 값 + 현재 스티커 값
떼지 않는 경우는 이전 위치에 있는 위, 아래 값을 그대로 쓰는것으로
3가지의 값을 비교해서 가장 큰 값을 해당 인덱스의 dp 값으로 사용하는 것으로 구현했습니다.

import sys
input = sys.stdin.readline

tc = int(input())
for _ in range(tc):
  n = int(input())
  stk = [[0]+list(map(int, input().split()))+[0] for _ in range(2)]
  dp = [[0 for _ in range(n+1)] for _ in range(2)]

  for i in range(1,n+1):
    dp[0][i] = max(dp[1][i-1] + stk[0][i], dp[0][i-1], dp[1][i-1])
    dp[1][i] = max(dp[0][i-1] + stk[1][i], dp[0][i-1], dp[1][i-1])

  print(max(dp[0][n], dp[1][n]))