티스토리 뷰

문제

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])
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함