ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1149 RGB 거리
    Algorithm/BOJ 2021. 2. 19. 15:32
    728x90

    출처: https://www.acmicpc.net/problem/1149

    분류: DP


    접근방식

    dp 문제임은 알았지만 결국 풀지 못하고 다른 분들의 풀이를 참고했습니다 ㅠㅠ

    처음에는 r, g, b에서 시작한 dp 3개를 다 채우면 되지않을까 생각을 했는데 이렇게 하면 두 색의 비용이 같거나 하는 등의 여러 예외들을 처리해줄 수가 없게됩니다 ㅠㅠ

    기존에서 사고를 좀 더 열어 생각해보면 각 집이 모두 r, g, b로 칠해질 수 있는 경우를 생각해보면 쉽게 접근할 수 있습니다 :)

    일반적인 1차원 배열이 아니라 [집의 개수][3] 크기의 2차원 배열을 채워나가는 방식으로 접근하면 쉽게 해결할 수 있었습니다.

     

    해결방법

    let numberOfHouse = Int(readLine()!)!
    var colorSet = [[Int]]()
    for _ in 0..<numberOfHouse {
        colorSet.append(readLine()!.split(separator: " ").map({ Int(String($0))! }))
    }
    
    var dp = [[Int]](repeating: [Int](repeating: 0, count: 3), count: numberOfHouse)
    
    dp[0][0] = colorSet[0][0]
    dp[0][1] = colorSet[0][1]
    dp[0][2] = colorSet[0][2]
    
    for idx in 1..<numberOfHouse {
        for color in 0..<3 {
            let other1 = (color+1) % 3
            let other2 = (color+2) % 3
            dp[idx][color] = min(dp[idx-1][other1] + colorSet[idx][color], dp[idx-1][other2] + colorSet[idx][color])
        }
    }
    
    print(min(dp[numberOfHouse-1][0], dp[numberOfHouse-1][1], dp[numberOfHouse-1][2]))

     

     

    배운점

    dp인 걸 알고도 풀지 못했다 ㅠㅠ 그래도 dp배열 자제를 2차원 배열로도 접근할 수 있다는 걸 배웠다.

     

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

    백준 13423 Three dots  (0) 2021.03.03
    백준 15810 풍선 공장  (0) 2021.03.03
    백준 2961 도영이가 만든 맛있는 음식  (0) 2021.02.19
    백준 1074 Z  (0) 2021.02.18
    백준 1992 쿼드트리  (0) 2021.02.18

    댓글

Designed by Tistory.