Social Developer
Home
  • 분류 전체보기 (121)
    • Life (3)
    • Idea note (0)
    • Algorithms (84)
    • CS (16)
      • Data Structure (7)
      • Network (9)
    • Skill (13)
      • Spring (0)
      • Java (9)
      • Infra (3)
      • Etc. (1)
Home
  • 분류 전체보기 (121)
    • Life (3)
    • Idea note (0)
    • Algorithms (84)
    • CS (16)
      • Data Structure (7)
      • Network (9)
    • Skill (13)
      • Spring (0)
      • Java (9)
      • Infra (3)
      • Etc. (1)
블로그 내 검색

Social Developer

어제보다 한 걸음 더

  • Algorithms

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

    2020. 3. 16.

    by. SDev

    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;
     
    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];
            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

     

    저작자표시 (새창열림)

    'Algorithms' 카테고리의 다른 글

    [백준 알고리즘] (DP) 2156번 Java 풀이  (0) 2020.03.23
    [백준 알고리즘] (DP) 9465번 Java 풀이  (0) 2020.03.20
    [백준 알고리즘] (DP) 11057번 Java 풀이  (0) 2020.03.15
    [백준 알고리즘] (DP)10844번 Java 2가지 풀이  (0) 2020.03.14
    [백준 알고리즘] (DP) 9095번 Java 2가지 풀이  (0) 2020.03.12

    댓글

    관련글

    • [백준 알고리즘] (DP) 2156번 Java 풀이 2020.03.23
    • [백준 알고리즘] (DP) 9465번 Java 풀이 2020.03.20
    • [백준 알고리즘] (DP) 11057번 Java 풀이 2020.03.15
    • [백준 알고리즘] (DP)10844번 Java 2가지 풀이 2020.03.14
    맨 위로
전체 글 보기
  • 인정님 블로그
  • 성현님 블로그
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
SDev

티스토리툴바