BOJ 9095. 1, 2, 3 더하기

1 minute read

BOJ 9095. 1, 2, 3 더하기

image

풀이

d[n] = 1, 2, 3의 합으로 나타내는 방법의 수 앞부분들은 겹치는 부분들로 memo 해놓고 계속 사용하게 되니
맨 마지막에 올 수 있는 1, 2, 3의 방법의 수만 찾아보면 된다.

d[n] = O + O + O + …. = n 이므로

  • (n -1 ) + 1  = n
  • (n -2 ) + 2  = n
  • (n -3 ) + 3  = n

위와 같이 3개의 방법이 있다.

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

Bottom-Up

import java.util.Scanner;

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

Top-Down

import java.util.Scanner;

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

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

    static int go(int i) {
        if (i == 0) return 1; // 0일때 방법은 1개로 침
        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) + go(i - 3);
        return d[i];
    }
}
val d = IntArray(11) { 0 }

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

fun go(i: Int): Int {
    if (i == 0) return 1 // 0일때 방법은 1개로 침
    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) + go(i - 3)
    return d[i]
}

풀이소스

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