[문제]
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
위 그림은 크기가 5인 정수 삼각형의 한 모습이다.
맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.
[풀이]
전형적인 2차원 dp 문제
공식처럼 사용하면 풀기 가능
[정답]
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.max
fun main(){
val br = BufferedReader(InputStreamReader(System.`in`))
val n = br.readLine().toInt()
val triangle = Array(n+1){IntArray(n+1){0} }
for(i in 1..n){
val input = br.readLine().split(" ").map{it.toInt()}
for(j in 1..i){
triangle[i][j] = input[j-1]
}
}
for(i in 1..n){
for(j in 1..i){
triangle[i][j] = triangle[i][j] + max(triangle[i - 1][j - 1],triangle[i-1][j])
}
}
println(triangle[n].max())
}
[출처]
https://www.acmicpc.net/problem/1932
'알고리즘' 카테고리의 다른 글
Dijkstra : 파티 [백준 1238, Kotlin] (0) | 2023.01.28 |
---|---|
DP : 타일 채우기 [백준 2133, Kotlin] (0) | 2023.01.24 |
DP : 병사 배치하기 [백준 18353, Kotlin] (0) | 2023.01.24 |
DP : 동전 1 [백준 2293, Kotlin] (0) | 2023.01.23 |
DP : 퇴사 [백준 14501, Kotlin] (0) | 2023.01.23 |