문제 링크 (opens new window)

# 풀이

  1. 스티커 행 위치와 열 위치를 기반으로 DP 테이블을 생성하였다.
  2. i, j 위치까지 올때까지 최대 점수를 저장하도록 테이블 초기화 로직을 구성
import Foundation

let T = Int(readLine()!)!
var n = 0
var stickers: [[Int]] = .init(repeating: .init(repeating: 0, count: n), count: 2)

for _ in 0..<T {
    n = Int(readLine()!)!
    var dp: [[Int]] = .init(repeating: .init(repeating: 0, count: n), count: 2)
    for i in 0..<2 {
        stickers[i] = readLine()!.split(separator: " ").map { Int($0)! }
    }
    var ret = 0

    if n == 1 {
        ret = max(stickers[0][0], stickers[1][0])
        print(ret)
        continue
    }

    dp[1][0] = stickers[1][0]
    dp[0][0] = stickers[0][0]

    dp[0][1] = dp[1][0] + stickers[0][1]
    dp[1][1] = dp[0][0] + stickers[1][1]

    for i in 2..<n {
        dp[0][i] = max(dp[1][i-1], dp[1][i-2]) + stickers[0][i]
        dp[1][i] = max(dp[0][i-1], dp[0][i-2]) + stickers[1][i]
    }

    ret = max(dp[0][n-1], dp[1][n-1])
    print(ret)
}