[BOJ] 1328 고층 빌딩 - P5

TaeGN·2024년 9월 20일

BOJ Platinum Challenge

목록 보기
87/114

문제풀이

  1. dp[빌딩을 세운 개수][왼쪽에서 보이는 빌딩의 개수][오른쪽에서 보이는 빌딩의 개수]로 둔다.
  2. 높이가 N인 빌딩을 먼저 세우고 dp[1][1][1] = 0로 둔다.
  3. (N - 1) ~ 1 순으로 빌딩을 세워나가면서 dp테이블을 채운다.

주의사항


소요시간

40분


package 백준.Platinum.P5.p1328_고층빌딩

const val MOD = 1_000_000_007
fun main() {
    val (N, L, R) = readln().split(" ").map(String::toInt)
    val dp = Array(N + 1) { Array(L + 1) { IntArray(R + 1) } }.apply { this[1][1][1] = 1 }
    for (n in 2..N) {
        for (l in 1..L) {
            for (r in 1..R) {
                dp[n][l][r] = (dp[n - 1][l][r].toLong() * (n - 2) % MOD).toInt()
                dp[n][l][r] = (dp[n][l][r] + dp[n - 1][l - 1][r]) % MOD
                dp[n][l][r] = (dp[n][l][r] + dp[n - 1][l][r - 1]) % MOD
            }
        }
    }
    println(dp[N][L][R])
}

https://github.com/TaeGN/Algorithm/blob/master/src/%EB%B0%B1%EC%A4%80/Platinum/P5/p1328_%EA%B3%A0%EC%B8%B5%EB%B9%8C%EB%94%A9/p1328_%EA%B3%A0%EC%B8%B5%EB%B9%8C%EB%94%A9.kt


문제링크

https://www.acmicpc.net/problem/1328

0개의 댓글