package com.dofury.kotlin
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.lang.Integer.max
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.`out`))
val count = br.readLine().toInt()
val scoreStairs = Array(count){ 0 }
repeat(count){
scoreStairs[it] = br.readLine().toInt()
}
bw.write("${maxScore(count,scoreStairs)}")
bw.flush()
bw.close()
br.close()
}
fun maxScore(n: Int, scoreStairs: Array<Int>): Int{
val scores = Array(n){ 0 }
if(n>=1)
scores[0] = scoreStairs[0]
if(n>=2)
scores[1] = max(scoreStairs[1],scoreStairs[0]+scoreStairs[1])
if(n>=3)
scores[2] = max(scoreStairs[0] + scoreStairs[2],scoreStairs[1]+scoreStairs[2])
if(n==0)
return 0
if(n==1)
return scores[0]
if(n==2)
return scores[1]
for(i in 3 until n){
scores[i] = max(scores[i-2] + scoreStairs[i], scores[i-3] + scoreStairs[i-1] +scoreStairs[i])
}
return scores[n-1]
}
동적 프로그래밍을 통해 쓸데없는 반복을 줄여서 계산해주었다.
score를 구하는 방법에 대한 식을 세우는 게 힘들었던것같다.
색종이 만들기(백준) (0) | 2023.08.02 |
---|---|
바이러스(백준) (0) | 2023.07.28 |
유기농 배추(백준) (0) | 2023.07.26 |
케빈 베이컨의 6단계 법칙 (0) | 2023.07.25 |
덱(백준) (0) | 2023.07.24 |
댓글 영역