쥐수의 공부노트

백준 1149번 RGB거리 본문

바킹독 알고리즘/다이나믹 프로그래밍

백준 1149번 RGB거리

쥐수 2023. 6. 3. 18:24
728x90

정답 :

let n = Int(readLine()!)!

var array = Array(repeating: Array(repeating: 0, count: 3), count: n+1)
var point = Array(repeating: Array(repeating: 0, count: 3), count: n+1)

for i in 1...n {
    let input = readLine()!.split(separator: " ").map{Int($0)!}
    point[i][0] = input[0]
    point[i][1] = input[1]
    point[i][2] = input[2]
}
array[1][0] = point[1][0]
array[1][1] = point[1][1]
array[1][2] = point[1][2]

for i in 2...n {
    array[i][0] = min(array[i-1][1], array[i-1][2]) + point[i][0]
    array[i][1] = min(array[i-1][0], array[i-1][2]) + point[i][1]
    array[i][2] = min(array[i-1][0], array[i-1][1]) + point[i][2]
}
var result = min(array[n][0], array[n][1], array[n][2])
print(result)
더보기

TMI : 점화식을 찾는 과정과 초기값 설정을 알고 풀었더니, 난이도가 엄청 쉬워졌다!

바킹독님의 글을 보게 되면, 점화식을 찾기 위한 방법으로 "D[i]를 i번째 집까지 칠했을 때의 최솟값으로 둔다면 점화식이 세워지지가 않습니다." 말을 보고 흠칫했다. 내가 생각했던 방식과 정확하게 일치했기 때문..

 

점화식을 찾는 과정을 배우고, 초기값 설정을 알게 되니, 예제 코드를 보지 않고 풀었더니 성공했다. 

 

바킹독님이 푼 방식과는 비슷하면서도 다른 점이 있긴 하지만, 과정은 비슷한거 같다! 

728x90