[백준 알고리즘] (DP) 2193번 Java 풀이
DP - 1463, 11726, 11727, 9095, 10844, 11057, 2193, 9465, 2156, 11053, 11055, 11722, 11054, 1912, 2579, 1699, 2133, 9461, 2225, 2011, 11052
출처: https://plzrun.tistory.com/entry/알고리즘-문제풀이PS-시작하기 [plzrun's algorithm]
<풀이> - Bottom up
요즘 다이나믹 프로그래밍 문제들을 풀면서 점화식 구하는 과정이 어려웠는데,
문제들을 다양하게 계속 접하다보니 어느정도 익숙해졌나보다.
조금만 나열을 해보고 규칙을 나름 쉽게 파악했다.
길이가 n인 경우의 수는 n-1인 경우에 의존적이다.
n-1의 마지막 숫자가 0이었다면 0과 1이 모두 올 수 있고, 1이었다면 0만 올 수 있다.
이를 활용하면 손쉽게 점화식을 구할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package dp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class N2193 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n =Integer.parseInt(br.readLine());
long dp[][] = new long[91][2];
dp[1][1] = 1;
dp[2][0] = 1;
for(int i=3;i<n+1;i++) {
for(int j =0; j<2; j++) {
if(j==0) {
dp[i][j] = dp[i-1][0] + dp[i-1][1];
}
else {
dp[i][j] = dp[i-1][0];
}
}
}
long sum = dp[n][0] + dp[n][1];
System.out.println(sum);
}
}
Colored by Color Scripter
|
***
구현과정에서는 한 가지 문제가 있었는데, 테스트 범위 내 최대 n인 90의 경우 int형이 감당을 못한다.
따라서 dp[][]와 sum은 long으로 정의해주어야 정상적으로 풀린다.
Github: https://github.com/jaeuk9407/AlgorithmBOJ
jaeuk9407/AlgorithmBOJ
BaekJoon Online Judge Problems. Contribute to jaeuk9407/AlgorithmBOJ development by creating an account on GitHub.
github.com