본문 바로가기

백준 PS일지/DynamicProgramming

[백준/Swift] 1149 : RGB거리

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

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

 

이 문제는 현재 칠할 집의 색이 이전에 칠한 RGB의 색과 같지 않아야 한다는 조건이 있습니다.

 

 구현 코드

import Foundation

func BOJ_1149()
{
    var n   = Int(readLine()!)!
    var arr = Array(repeating: [Int](), count: n + 1)
    for i in 1...n
    {
        arr[i] = readLine()!.split(separator: " ").map{Int($0)!}
    }
    for i in 2...n
    {
        arr[i][0] += arr[i - 1][1] < arr[i - 1][2] ? arr[i - 1][1] : arr[i - 1][2]
        arr[i][1] += arr[i - 1][2] < arr[i - 1][0] ? arr[i - 1][2] : arr[i - 1][0]
        arr[i][2] += arr[i - 1][0] < arr[i - 1][1] ? arr[i - 1][0] : arr[i - 1][1]
    }
    var min = arr[n][0]
    min = min < arr[n][1] ? min : arr[n][1]
    min = min < arr[n][2] ? min : arr[n][2]
    print(min)
}
BOJ_1149()

 

개선 점 & 새롭게 알게 된 점

 

 

새로 알게된 기능 적용한 코드

 

import Foundation

func BOJ_1149()
{
    var n   = Int(readLine()!)!
    var arr = Array(repeating: [Int](), count: n + 1)
    for i in 1...n
    {
        arr[i] = readLine()!.split(separator: " ").map{Int($0)!}
    }
    for i in 2...n
    {
        arr[i][0] += min(arr[i-1][1],arr[i - 1][2])
        arr[i][1] += min(arr[i-1][2], arr[i - 1][0])
        arr[i][2] += min(arr[i-1][0],arr[i-1][1])
    }
    print(arr[n].min()!)
}
BOJ_1149()