코딩테스트

계단 오르기(백준)

dofury 2023. 7. 27. 16:50
728x90

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를 구하는 방법에 대한 식을 세우는 게 힘들었던것같다.

728x90