-
9095번 1, 2, 3 더하기 / BOJ / acmicpc.net백준 2020. 1. 27. 22:55728x90
문제링크 : https://www.acmicpc.net/problem/9095
제출링크 : https://www.acmicpc.net/source/17177201
자바 소스 : https://github.com/skysign/WSAPT/blob/master/acmicpc.net/11726%EB%B2%88%202%C3%97n%20%ED%83%80%EC%9D%BC%EB%A7%81/src/Main.java점화식이 딱히 떠오르지 않아서, 그냥 손으로 5번까지 해봤는대,
왠지 d_i = d_i-1 + d_i-2 + d_i-3 인것 같습니다. d_7 으로 테스트 해봤더니 44가 나와서,
이 식으로 풀어 봤습니다.d_1 = 1 : 1
d_2 = 1+1 : 2
d_3 = 1+1+1, 2+1, 1+2, 3: 4
d_4 = 1+1+1+1, 1+2+1, 2+1+1, 1+1+2, 2+2, 1+3, 3+1 : 7
d_5 = 13 개
한번 13개 적어 보면,
1, 1, 1, 1, 1
1, 1, 1, 2
1, 1, 2, 1
1, 2, 1, 1
2, 1, 1, 1
1, 2, 2
2, 1, 2
2, 2, 1
1, 1, 3
1, 3, 1
3, 1, 1
2, 3
3, 2d_4 하고 d_5는 아래 점화식이 성립하는 것을 손으로 풀어서 확인해 봤구요, 예제로 주어진 7과, 10이 각각 44, 274로 맞는 답이 나와서, 아래 점화식으로 풀어 보겠습니다.
\begin{aligned}
dp_{n} = dp_{n-1} + dp_{n-2} + dp_{n-3} \\
\end{aligned}import java.util.Scanner; /** * BOJ 9095번 1, 2, 3 더하기 * 문제링크 : https://www.acmicpc.net/problem/9095 * 제출링크 : https://www.acmicpc.net/source/17177201 * 문제풀이 : https://skysign.tistory.com/178 */ public class Main { int[] dp; public void solve() { Scanner sc = new Scanner(System.in); ans(10); int T = sc.nextInt(); for(int t=0; t<T; ++t) { int N = sc.nextInt(); System.out.println(dp[N]); } } public void ans(int N) { /** * d_1 = 1 : 1 * d_2 = 1+1 : 2 * d_3 = 1+1+1, 2+1, 1+2, 3: 4 * d_4 = 1+1+1+1, 1+2+1, 2+1+1, 1+1+2, 2+2, 1+3, 3+1 : 7 * d_5 = 13 개 * d_4 하고 d_5는 아래 점화식이 성립하는 것을 손으로 풀어서 확인해 봤구요 * 왠지 느낌에, d_i = d_i-1 + d_i-2 + d_i-1 인 것 같습니다. d_7 으로 확인해 보고, 44가 나오면 * 이 점화식으로 풀어 보겠습니다. */ dp = new int[N+1]; if(N >= 1) dp[1] = 1; if(N >= 2) dp[2] = 2; if(N >= 3) dp[3] = 4; for(int n=4; n<=N; ++n) { dp[n] = dp[n-1] + dp[n-2] + dp[n-3]; } } public static void main(String[] args) { Main main = new Main(); main.solve(); } }
728x90'백준' 카테고리의 다른 글
1912번 연속합 / BOJ (0) 2020.03.22 BOJ 11726번 2×n 타일링 (0) 2020.01.27 2579번 계단 오르기 / BOJ / acmicpc.net (0) 2020.01.27 1463번 1로 만들기 / BOJ / acmicpc.net (0) 2020.01.27 1149번 RGB거리 / BOJ / acmicpc.net (0) 2020.01.27