jinux127
Jinux
jinux127
  • 분류 전체보기 (109)
    • 엘리스 SW 엔지니어 트랙 (6)
      • TIL (6)
    • 개발지식 (22)
      • React (4)
      • JavaScript (9)
      • Web (4)
      • Node.js (1)
      • TypeScript (4)
    • 알고리즘 (69)
      • 백준 (47)
      • 프로그래머스 (14)
      • 이것이 코딩테스트다 (6)
    • 프로젝트 (10)
      • PHOTOCALENDAR (3)
      • 빙수먹을래? (7)
    • Life (0)
      • 헬스 (0)
      • 독서 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 이전

인기 글

태그

  • 그리디
  • node.js
  • 구현
  • 알고리즘
  • 문법
  • CSS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jinux127

Jinux

[boj 2193] 이친수
알고리즘/백준

[boj 2193] 이친수

2022. 3. 11. 11:44
// 이친수

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

const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
const input = require('fs').readFileSync(filePath).toString().trim().split(/\s/);

const N = input.shift();

const sol = (N) =>{
    const dp = Array.from(Array(91), () => new Array(2).fill(0));
    dp[1][1] = 1;
    dp[2][0] = 1;

    for(let i=3; i<=N; i++){
        dp[i][0] = BigInt(dp[i-1][0]) + BigInt(dp[i-1][1]);
        dp[i][1] = BigInt(dp[i-1][0]);
    }

    console.log((dp[N][0] + dp[N][1]).toString());


}

sol(N);

 

다이나믹 프로그래밍은 너무 어렵따.. 다른 문제들을 다른 분들의 풀이를 보며 이해해보고 처음으로 내 힘으로 풀어봤다.

문제의 규칙을 찾아내 점화식을 작성하는게 핵심인 것 같다.

 

자리수를 i, 끝 자리의 수를 j 라고 했을때 dp[i][0]은 i자리의 0 으로 끝나는 개수, dp[i][1]은 i 자리의 1로 끝나는 개수 

끝자리가 0이면 0과 1이 올수 있고 1이면 0만 올 수 있다.

 

끝자리    다음 끝자리

0     ->     0,1

1     ->      0

 

따라서

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

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

라는 식을 세울 수 있다.

 

값이 자꾸 커지기 때문에 안정적으로 큰 정수값을 담을 수 있는 BigInt로 담아서 arr에 대입하고 출력해주어야한다! 

'알고리즘 > 백준' 카테고리의 다른 글

[boj 1260] DFS와 BFS -js  (0) 2022.03.13
[boj 13023] ABCDE -js  (0) 2022.03.12
[boj 10808] 알파벳 개수 -js  (0) 2022.03.10
[boj 1935] 후위 표기식2 -js  (0) 2022.03.09
[boj 17299] 오등큰수 - js  (0) 2022.03.09
jinux127
jinux127

티스토리툴바