BOJ 11726. 2xn 타일링

1 minute read

BOJ 11726. 2xn 타일링

image

풀이

d[n] = 2*n 크기의 직사각형을 채우는 방법의 수 앞부분들은 겹치는 부분들로 memo 해놓고 계속 사용하게 되니

image

점화식
d[n] = d[n-1] + d[n-2]

또한 d가 1일 때 방법은 1개이므로, d[1] = 1

image

d가 2일 때 방법은 1개이므로, d[2] = 2

image

Bottom-Up

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] d = new int[n + 1];
        d[1] = 1;
        d[2] = 2;
        for (int i = 3; i <= n; i++) {
            d[i] = (d[i - 1] + d[i - 2]) % 10007;
        }
        System.out.println(d[n]);
        sc.close();
    }
}
fun main() {
    val n = readLine()!!.toInt()
    val d = IntArray(n + 1) { 0 }
    d[1] = 1
    d[2] = 2
    for (i in 3..n) d[i] = (d[i - 1] + d[i - 2]) % 10007
    println(d[n])
}

Top-Down

import java.util.Scanner;

class Main {
    static int[] d = new int[1001];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println(go(sc.nextInt()));
    }

    static int go(int i) {
        if (i == 1) return 1;
        if (i == 2) return 2;
        if (d[i] > 0) return d[i];
        d[i] = (go(i - 1) + go(i - 2)) % 10007;
        return d[i];
    }
}
val d = IntArray(1001) { 0 }

fun main() {
    println(go(readLine()!!.toInt()))
}

fun go(i: Int): Int {
    if (i == 1) return 1
    if (i == 2) return 2
    if (d[i] > 0) return d[i]
    d[i] = (go(i - 1) + go(i - 2)) % 10007
    return d[i]
}

풀이소스

github.com/beomjo/algorithm-study/blob/main/BOJ/java/11726.java github.com/beomjo/algorithm-study/blob/main/BOJ/kotlin/11726.kt