본문 바로가기
문제풀이/백준

[BOJ_2133_KOTLIN] 타일 채우기

by StarDev 2021. 12. 29.
반응형
SMALL

 

문제

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

 

2133번: 타일 채우기

3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.

www.acmicpc.net

입력

첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다.

출력

첫째 줄에 경우의 수를 출력한다.

문제풀이

DP문제는 아직 너무 어려운 것 같다. 점화식을 찾으려고 나름대로 머리를 썼으나, 홀수인 경우 짝이 맞지않아 0이라는 것 그리고 N=2일 때, 3이 나오고 N=4일때 N=2인 부분이 2번 나와서 곱해진다는 것까지만 유추해낼 수 있었다. 도저히 풀리지가 않아 더보기 에서 나오는 참고 사이트를 진행하여 풀었다. DP 연습이 더 필요한 것 같다. 

 

소스코드

val N = readLine()!!.toInt()
val d = Array(1001) { 0 }

fun main() {
    // 홀수면 무조건 짝이 맞지 않아 0이다.
    if(N%2!=0) print(0)
    else print(dp(N))
}

fun dp(n: Int) :Int {
    if(n == 0) return 1
    if(n == 1) return 0
    if(n == 2) return 3
    if(d[n] != 0) return d[n]

    var res = 3 * dp(n-2)
    for (i in 3..n){
        if (i % 2 == 0) res += 2 * dp(n - i)
    }

    d[n] = res
    return d[n]
}
반응형
LIST

'문제풀이 > 백준' 카테고리의 다른 글

[BOJ_2529_JAVA] 부등호  (0) 2022.01.12
[BOJ_4358_KOTLIN] 생태학  (0) 2022.01.12
[BOJ_5014_KOTLIN] 스타트링크  (0) 2022.01.12
[BOJ_5430_KOTLIN] AC  (0) 2021.12.28
[BOJ_1403_KOTLIN] 로봇 청소기  (2) 2021.12.28

댓글