devStory

[BOJ] #DP - 9095번 1,2,3 더하기 (JAVA) 본문

알고리즘/문제 풀이

[BOJ] #DP - 9095번 1,2,3 더하기 (JAVA)

Hyen_K 2018. 9. 25. 17:43

문제 출처 : https://www.acmicpc.net/problem/9095


1 = 1

2 = 1 + 1

   = 2

3 = 1 + 1 + 1

   = 2 + 1

   = 1 + 2

   = 3

으로 나 타 낼 수 있다. 이를 S(1), S(2), S(3) 이라고 할 때


4는 S(3)에 +1을 한 것과 같다. 그리고 S(2)에 +2를 한 것과 같다. 마지막으로 S(1)에 +3을 한 것과 같다.

즉, 4 = S(3) + 1 = 1 + 1 + 1

 = 2 + 1 + 1

 = 1 + 2 + 1

 = 3 + 1

= S(2) + 2 = 1 + 1 + 2

 = 2 + 2 

=  S(1) + 3 = 1 + 3


이를 통해 정수 n을 1, 2, 3 의 합으로 나타내는 방법의 수를 S(n) 이라 할 때, 

S(n) = S(n - 1) + S(n -2) + S(n - 3) 임을 알 수 있다.


점화식이기 때문에 다이나믹 프로그래밍의 Bottom-Up으로 문제를 해결하였다.


아래는 전체 코드이다.



Comments