PS/문제 풀이

[프로그래머스/Swift] 12913번 - 땅따먹기

시르베어 2025. 2. 9. 02:04

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12913

풀이

  • 해당 문제는 DP로 풀 수 있음
  • 이전 인덱스의 같은 위치의 값은 사용이 불가능하니 해당 값을 제외한 나머지 값들중 최대 값을 고르고 더해서 저장한다.
  • 즉 [index][0] 은 [index][1]~[3] 중 최대값에 land[index-1][0]값을 더한 값이 된다.
  • 마지막 인덱스까지 구하면 4개의 합계가 나오니 그중 최대값을 반환하면 된다.

전체코드

import Foundation

func solution(_ land:[[Int]]) -> Int{
    let len: Int = land.count
    var arr: [[Int]] = [[Int]](repeating: [Int](repeating: 0, count: 4), count: len+1)
    for (idx,nums) in land.enumerated() {
        arr[idx+1][0] = max(max(arr[idx][1],arr[idx][2]),arr[idx][3]) + nums[0]
        arr[idx+1][1] = max(max(arr[idx][0],arr[idx][2]),arr[idx][3]) + nums[1]
        arr[idx+1][2] = max(max(arr[idx][0],arr[idx][1]),arr[idx][3]) + nums[2]
        arr[idx+1][3] = max(max(arr[idx][0],arr[idx][1]),arr[idx][2]) + nums[3]
    }
    return max(max(max(arr[len][0],arr[len][1]),arr[len][2]),arr[len][3])
}