ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 2096 내려가기
    Algorithm/BOJ 2021. 4. 20. 09:54
    728x90

    출처: www.acmicpc.net/problem/2096

    분류: DP


    접근방식

    간단한 DP 문제였습니다.

    1, 2, 3 각 열에서 가장 최선인 경우를 계속 선택해나가면 됩니다. 

    행마다 갱신하고 나면 그 이전은 생각할 필요가 없으므로 디피는 각 열을 저장할 행 하나만 있으면 됩니다 :)

    저는 맨 밑에서부터 올라왔는데 위에서부터 내려가도 상관은 없을듯 하네요!

     

    해결방법

    let n = Int(readLine()!)!
    var num = [[Int]]()
    
    for _ in 0..<n {
        num.append(readLine()!.split(separator: " ").map { Int(String($0))! })
    }
    
    var maxDp = num.last!
    var minDp = num.last!
    
    for row in num.dropLast().reversed() {
        var maxTmp = [Int](repeating: 0, count: 3)
        var minTmp = [Int](repeating: 0, count: 3)
        maxTmp[0] = row[0] + max(maxDp[0], maxDp[1])
        maxTmp[1] = row[1] + maxDp.max()!
        maxTmp[2] = row[2] + max(maxDp[1], maxDp[2])
        maxDp = maxTmp
        
        minTmp[0] = row[0] + min(minDp[0], minDp[1])
        minTmp[1] = row[1] + minDp.min()!
        minTmp[2] = row[2] + min(minDp[1], minDp[2])
        minDp = minTmp
    }
    
    print(maxDp.max()!, minDp.min()!)
    

     

    배운점

    'Algorithm > BOJ' 카테고리의 다른 글

    백준 17070 파이프 옮기기 1  (0) 2021.04.20
    백준 9252 LCS 2  (0) 2021.04.20
    백준 1915 가장 큰 정사각형  (0) 2021.04.19
    백준 1937 욕심쟁이 판다  (0) 2021.04.19
    백준 1005 ACM Craft  (0) 2021.04.19

    댓글

Designed by Tistory.