Algorithms

[백준 알고리즘] (DP) 2193번 Java 풀이

SDev 2020. 3. 16. 10:13
728x90

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]

 

백준 알고리즘 2193번

 

<풀이> - 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;
 
 
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];
        br.close();
        
        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