[BOJ 실버1] BOJ 거리

Android Chen·2022년 3월 16일
0

  • dp로 10분만에 해결한 문제이다. 2중포문을 돌면서 각 지점에 도달할 수 있는 최솟값의 에너지를 저장하면 끝
import java.lang.Math.min
fun main() = with(System.`in`.bufferedReader()) {
    val n = readLine().toInt()
    val board = readLine()
    val dp = IntArray(n){ Int.MAX_VALUE}
    dp[0] = 0
    for(i in 0 until n){
        for(j in i+1 until n){
            if(dp[i]!=Int.MAX_VALUE) {
                when (board[i]) {
                    'B' -> {
                        if (board[j] == 'O') {
                            dp[j] = min(dp[j], dp[i] + ((j - i) * (j - i)))
                        }
                    }
                    'O' -> {
                        if (board[j] == 'J') {
                            dp[j] = min(dp[j], dp[i] + ((j - i) * (j - i)))
                        }
                    }
                    'J' -> {
                        if (board[j] == 'B') {
                            dp[j] = min(dp[j], dp[i] + ((j - i) * (j - i)))
                        }
                    }
                }
            }
        }
    }
    if(dp[n-1]==Int.MAX_VALUE){
        println(-1)
    }
    else println(dp[n-1])
}
profile
https://github.com/Userz1-redd

0개의 댓글