[알고리즘] 백준 9095번, 1, 2, 3 더하기 JAVA풀이


백준 9095번, 1, 2, 3 더하기 JAVA풀이

정수 4를 1, 2, 3의 조합으로 나타내는 방법은 총 7가지가 있다.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

정수 n이 주어졌을 때, n을 1,2,3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

D[n] = n을 1, 2, 3의 조합으로 나타내는 방법의 수

D[i] = D[i-1] + D[i-2] + D[i-3]

  • 4일 경우
    • D[n-1] = D[3]
      • D[n-1] = D[2]
      • D[n-2] = D[1]
      • D[n-3] = D[0]
    • D[n-2] = D[2]
      • D[n-1] = D[1]
      • D[n-2] = D[0]
      • D[n-3] = D[-1]
    • D[n-3] = D[1]
  • D[0] = 1
    • DP 에서는 0도 1로 처리(?)
    • 빈 스트링
  • D[1] = 1
    • 1
  • D[2] = 2
    • 1+1
    • 2
  • D[3] = D[0] + D[1] + D[2] = 4
    • 1+1+1
    • 1+2
    • 2+1
    • 3
//TOP-DOWN
public static int topDown (int n) {
    if (n == 0) {
        DP[0] = 1;
    }
    if (n == 1) {
        DP[1] = 1;
    }
    if (n == 2) {
        DP[2] = 2;
    }
    if (n >= 3) {
        DP[n] = topDown(n-1) + topDown(n-2) + topDown(n-3);
    }
    return DP[n];
}
//BOTTOM-UP
public static int bottomUp (int n) {
    DP[0] = 1; DP[1] = 1; DP[2] = 2;
    for (int i=3; i<=n; i++) {
        DP[i] = DP[i - 1] + DP[i - 2] + DP[i - 3];
    }
    return DP[n];
}





© 2018. by HYEON

Powered by HYEON