[백준] 2193: 이친수

강은서·2022년 1월 23일
0

백준

목록 보기
6/21
post-thumbnail

문제

문제 풀이

n = 1부터 5까지 작성해보니 다음과 같은 규칙을 찾았다.

즉, 다음과 같이 규칙을 찾을 수 있다.
(j == 0일 경우) dp[n][j] = dp[n-1][0] + dp[n-1][1]
(j == 1일 경우) dp[n][j] = dp[n-1][0]

  • 마지막 자리수가 0일 경우, 다음에 0또는 1이 올 수 있다.
  • 마지막 자리수가 1일 경우, 다음에는 0만 올 수 있다.

코드


import java.util.Scanner;

public class ANS2193 {

    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);

        //자릿수 입력
        int num = sc.nextInt();

        //dp선언 및 초기화
        long dp[][] = new long[num+1][2];
        dp[1][1] = 1;
        dp[1][0] = 0;

        //dp구하기
        for(int i = 2 ; i <= num ; i++){
            for(int j = 0 ; j <=1 ; j++){
                if(j == 0){
                    dp[i][j] = dp[i-1][0] + dp[i-1][1];
                }
                else{
                    //j == 1일 경우,
                    dp[i][j] = dp[i-1][0];
                }
            }
        }

        //결과구하기
        long result = 0;
        for(int i = 0 ; i <= 1; i++){
            result += dp[num][i];
        }
        System.out.println(result);
    }
}

처음에 result와 배열의 자료형을 int로 작성하니 결과가 틀렸다고 나왔다. 다른 블로그에서 마지막 범위인 90을 넣어보면 범위가 넘어서 다른 수를 출력한다는 글을 보고 역시 90을 입력하니 음수가 나왔다.
그래서 long형으로 바꾸었더니 정답으로 결과가 나왔다. 앞으로 범위에서 가장 큰 수도 입력해보는 습관을 가져봐야겠다.

0개의 댓글