반응형
[백준 1932번] 정수 삼각형 - Kotlin
https://www.acmicpc.net/problem/1932
문제
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
- 위 그림은 크기가 5인 정수 삼각형의 한 모습이다.
- 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라.
- 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
- 삼각형의 크기는 1 이상 500 이하이다.
- 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.
입력
- 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
출력
- 첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.
풀이
import kotlin.math.max
private class Solution1932 {
fun solution(n: Int, graph: Array<IntArray>): Int {
val dp = Array(n) { row -> IntArray(graph[row].size) }
dp[0][0] = graph[0][0]
for (i in 1 until dp.size) {
for (j in dp[i].indices) {
val prev = dp.getOrNull(i - 1)?.getOrNull(j - 1) ?: 0
val next = dp.getOrNull(i - 1)?.getOrNull(j) ?: 0
dp[i][j] = max(prev, next) + graph[i][j]
}
}
return dp[n - 1].maxOrNull()!!
}
}
private fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val n = br.readLine().toInt()
val graph = Array(n) { row ->
when (row) {
0 -> {
val str = br.readLine().toInt()
IntArray(1) { str }
}
else -> {
val str = br.readLine().split(" ")
IntArray(row + 1) { col -> str[col].toInt() }
}
}
}
bw.append("${Solution1932().solution(n, graph)}\n")
bw.flush()
br.close()
bw.close()
}
반응형
'Software > 백준' 카테고리의 다른 글
[백준 1158번] 요세푸스 문제 - Kotlin (0) | 2024.04.29 |
---|---|
[백준 10816번] 숫자 카드 2 - Kotlin (0) | 2024.04.29 |
[백준 11053번] 가장 긴 증가하는 부분 수열 - Kotlin (0) | 2024.04.29 |
[백준 16234번] 인구 이동 - Kotlin (0) | 2024.04.29 |
[백준 1149번] RGB거리 - Kotlin (0) | 2024.04.29 |