🐣 알고리즘 삐약/💻 백준 삐약

78 삐약 : 백준 2193| 이친수 [바킹독 문제 풀이|DP|JAVA]

우주수첩 2024. 6. 18. 17:06
728x90
package BKD_0x10_DP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_2193 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        long[][] dp = new long[91][2];

        dp[1][0] = 0;
        dp[1][1] = 1;

        for(int i=2;i<=N;i++){
            dp[i][0] = dp[i-1][0]+dp[i-1][1];
            dp[i][1] = dp[i-1][0];
        }

        System.out.println(dp[N][0] + dp[N][1]);

    }
}

 

 

이전에 풀었던 문제에서 이차원 배열을 사용해서 문제를 해결했던 기억이 있기에

 

 

하. 또 적용해서 풀 때가 된건가. 나란 사람 진짜 어메이징 하다. 내 적용 능력 확인 쌉가능 어디 한번 덤벼보셈 하고

 

처음 접근 할 때는 끝자리가 0인경우와 1인 경우를 생각해서 진행했다. 

 

그래서 끝자리가 0인 이친수의 개수, 1인 이친수의 개수를 따로 계산하여 저장하였고 점화식은

dp[i][0] = dp[i-1][0]+dp[i-1][1];
dp[i][1] = dp[i-1][0];

 

이렇게 세웠다.

 

 

추가적으로 전체 개수 기준으로 생각 해 보니

 

1 - 1 - 2 - 3 - 5 .... 순으로 증가하더라

 

어디서 많이 본 그거다

package BKD_0x10_DP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_2193 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        long[] dp = new long[91];

        dp[0] = 0;
        dp[1] = 1;

        for(int i=2;i<=N;i++){
            dp[i] = dp[i-1]+dp[i-2];
        }

        System.out.println(dp[N]);

    }
}

 

이렇게도 된다.

 

 

위에게 윗 코드

아래있는게 아래 코드이다

728x90