[BOJ] 스티커

Minsu Han·2022년 10월 4일
0

알고리즘연습

목록 보기
25/105

코드

import sys
input = sys.stdin.readline

def solution(arr, n):
    for i in range(1, n):
        if i == 1:
            arr[0][i] += arr[1][i-1]
            arr[1][i] += arr[0][i-1]
        else:
            arr[0][i] += max(arr[1][i-1], arr[0][i-2], arr[1][i-2])
            arr[1][i] += max(arr[0][i-1], arr[0][i-2], arr[1][i-2])

    return max(map(max, arr))

arr = []

for _ in range(int(input())):
    n = int(input())
    for _ in range(2):
        arr.append(list(map(int, input().split())))
    print(solution(arr, n))
    arr = []

결과

image


풀이 방법

  • 다이나믹 프로그래밍을 활용하였다.
  • 현재 스티커를 뗀다고 가정하면 이전에 바로 왼쪽 스티커는 뗄 수 없었을 것이다.
  • 따라서 왼쪽 대각선 방향의 스티커를 떼거나, 떼지 않을 수도 있으므로, 이전 스티커들의 합은 왼쪽 대각선 방향 스티커와 그 이전 열(i-2열)의 두 스티커 중 큰 값을 선택하면 된다
  • 이렇게 n열까지 차례로 스티커 합의 최대값을 더하였다.

profile
기록하기

0개의 댓글