문제 풀이/[JAVA_자바] 백준

[JAVA / 자바] 백준(BOJ) 9095번 - 1, 2, 3 더하기 (실버 3)

Seunghyun_KO 2022. 3. 29. 09:00
728x90
반응형

 문제 

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.

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

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


 입력 

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.


 출력 

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.


 


 문제 접근 방법 

이번 문제는 다이나믹 프로그래밍(Dynamic Programming) 문제이다.

 

점화식을 찾으면 f(x) = f(x-1) + f(x-2) + f(x-3) 임을 알 수 있다.

따라서 dp [1] ~ dp [3]는 미리 값을 넣어놓고 이후는 dp배열에 값이 들어있는지 없는지 판단하여 이전에 계산된 값이면 그대로 호출해주면 될 것이고, 그렇지 않다면 가장 마지막 계산부터 다시 이어서 원하는 수까지 계산을 마저 해주어 값을 내주면 된다.

 

int plus123()

위 함수는 dp배열에 문제에서 원하는 인덱스에 값의 저장 유무를 따져 저장되어있으면 해당 인덱스에 저장된 수를 반환해주고, 그렇지 않다면 해당 인덱스에 저장되어야 할 값을 구해(점화식에 따라 함수 재귀 호출) 저장해놓고 그 수를 반환해준다.


 JAVA 코드 풀이 

 코드 실행 결과 


 후기 

이번 문제는 점화식을 찾는 게 좀 힘들었다,, 나중에 규칙이 안 보이면 결괏값을 계산해보고 이것저것 계산해서 찾아봐야겠다....


 문제 원본 

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

 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

 알고리즘 분류 

 

728x90
반응형