[백준] 1149번: RGB거리 - Kotlin[코틀린]

2023. 8. 7. 17:38·알고리즘/Baekjoon

문제

 

 

1149번: RGB거리

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

www.acmicpc.net

 


풀이

 

 이 문제는 3가지 dp배열을 만들고 각각 현재 줄에서 R, G, B를 선택하는 경우를 저장해주는 것으로 해결할 수 있다. 예를 들어 N번 줄에서 R를 선택할 경우에는 N - 1번 줄에서는 G나 B를 선택해야하고 둘 중에서 더 적은 비용의 숫자를 골라 현재 줄의 R을 선택하는 비용과 합쳐준 비용을 dpR배열에 저장해준다.

 

R G B
26 40 83
49 60 57
13 89 99

 이 경우에서 dp배열들은 dpR[0] = 26, dpG[0] = 40, dpB[0] = 83로 초기화를 해준다. 그리고 적은 비용을 선택해나가면 된다.

 

dpR[1] = dpG[0] + arr[1][0] = 40 + 49 = 89

dpG[1] = dpR[0] + arr[1][1] = 26 + 60 = 86

dpB[1] = dpR[0] + arr[1][2] = 26 + 57 = 83

 

dpR[2] = dpB[1] + arr[2][0] = 83 + 13 = 96

dpG[2] = dpB[1] + arr[2][1] = 83 + 89 = 172

dpB[2] = dpG[1] + arr[2][2] = 86 + 99 = 185

 

 이런 방식으로 dp 배열들을 채워가고, 가장 적은 비용을 선택한 경우를 출력해주면 된다.


코드

 

import java.util.*
import kotlin.math.min

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val num = br.readLine().toInt()
    val arr = Array(num) { IntArray(3) }
    val dpR = IntArray(num)
    val dpG = IntArray(num)
    val dpB = IntArray(num)

    for(i in 0 until num) {
        val line = StringTokenizer(br.readLine())
        for(j in 0 until 3) {
            arr[i][j] = line.nextToken().toInt()
        }
    }

    dpR[0] = arr[0][0]
    dpG[0] = arr[0][1]
    dpB[0] = arr[0][2]

    for(i in 1 until num) {
        dpR[i] = min(dpG[i-1], dpB[i-1]) + arr[i][0]
        dpG[i] = min(dpR[i-1], dpB[i-1]) + arr[i][1]
        dpB[i] = min(dpR[i-1], dpG[i-1]) + arr[i][2]
    }

    val min = min(dpR[num-1], min(dpG[num-1], dpB[num-1]))

    bw.write("$min")
    bw.flush()
    bw.close()
    br.close()
}

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 1010번: 다리 놓기 - Kotlin[코틀린]  (0) 2023.08.17
[백준] 10814번: 나이순 정렬 - Kotlin[코틀린]  (0) 2023.08.10
[백준] 10773번: 제로 - Kotlin[코틀린]  (0) 2023.08.07
[백준] 2438 ~ 2446번: 별 찍기 - 1 ~ 9 - Kotlin[코틀린]  (0) 2023.08.05
[백준] 1012번: 유기농 배추 - Kotlin[코틀린]  (0) 2023.08.04
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 1010번: 다리 놓기 - Kotlin[코틀린]
  • [백준] 10814번: 나이순 정렬 - Kotlin[코틀린]
  • [백준] 10773번: 제로 - Kotlin[코틀린]
  • [백준] 2438 ~ 2446번: 별 찍기 - 1 ~ 9 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      우선순위 큐
      큐
      스택
      유니온파인드
      피보나치
      수학
      재귀
      크루스칼
      그래프이론
      분리집합
      이분 탐색
      그리디
      티스토리
      dfs
      정렬
      문자열
      구현
      누적 합
      MST
      에라토스테네스의 체
      모듈러 곱셈 역원
      DP
      프림
      BFS
      투 포인터
      그래프 탐색
      소수 판정
      브루트포스
      분할 정복
      백트래킹
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 1149번: RGB거리 - Kotlin[코틀린]
    상단으로

    티스토리툴바