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
알고리즘 분류
728x90
반응형
'문제 풀이 > [JAVA_자바] 백준' 카테고리의 다른 글
[JAVA / 자바] 백준(BOJ) 11399번 - ATM (실버 3) (0) | 2022.03.31 |
---|---|
[JAVA / 자바] 백준(BOJ) 11047번 - 동전 0 (실버 3) (0) | 2022.03.30 |
[JAVA / 자바] 백준(BOJ) 2630번 - 색종이 만들기 (실버 3) (0) | 2022.03.28 |
[JAVA / 자바] 백준(BOJ) 1992번 - 쿼드트리 (실버 1) (0) | 2022.03.25 |
[JAVA / 자바] 백준(BOJ) 1780번 - 종이의 개수 (실버 3) (0) | 2022.03.24 |