import java.util.*
import kotlin.collections.ArrayList
import kotlin.math.max
fun main() = with(Scanner(System.`in`)){
var n = nextInt()
// 임시 저장용
var tmparr = ArrayList<Int>()
// 입력받는 배열
var arr = ArrayList<ArrayList<Int>>()
for(i in 0 until n){
for(j in 0 .. i){
tmparr.add(nextInt())
}
arr.add(tmparr)
tmparr = arrayListOf()
} // 배열 입력해줌
for(i in 1 until n){
for(j in 0 .. i){
when(j){
// 맨 왼쪽 수 일때
0 -> {
arr[i][j] += arr[i-1][0]
}
// 맨 오른쪽 수 일때
i -> {
arr[i][j] += arr[i-1][j-1]
}
// 중간 숫자들
else -> {
arr[i][j] += max(arr[i-1][j-1],arr[i-1][j])
}
}
}
}
println(arr[n-1].max())
}
처음엔 스캐너로 입력을 받았는데 메모리,시간 면에서 낭비한 것이 너무 많은 것 같아서
import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.collections.ArrayList
import kotlin.math.max
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
val n = readLine().toInt()
val arr = ArrayList<IntArray>()
for(i in 0 until n){
arr.add(readLine().split(" ").map { it.toInt() }.toIntArray())
}
for(i in 1 until n){
for(j in 0 .. i){
when(j){
// 맨 왼쪽 수 일때
0 -> {
arr[i][j] += arr[i-1][0]
}
// 맨 오른쪽 수 일때
i -> {
arr[i][j] += arr[i-1][j-1]
}
// 중간 숫자들
else -> {
arr[i][j] += max(arr[i-1][j-1],arr[i-1][j])
}
}
}
}
println(arr[n-1].max())
}