상세 컨텐츠

본문 제목

계단 오르기(백준)

코딩테스트

by 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

'코딩테스트' 카테고리의 다른 글

색종이 만들기(백준)  (0) 2023.08.02
바이러스(백준)  (0) 2023.07.28
유기농 배추(백준)  (0) 2023.07.26
케빈 베이컨의 6단계 법칙  (0) 2023.07.25
덱(백준)  (0) 2023.07.24

관련글 더보기

댓글 영역