[백준 2011번] DP(다이나믹 프로그래밍) - 암호코드

김민지·2023년 8월 7일
0

냅다 시작 백준

목록 보기
73/118

✨ 문제 ✨

✨ 정답 ✨

const { count } = require("console");
const fs = require("fs");
const { nextTick } = require("process");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./예제.txt";
let input = fs.readFileSync(filePath).toString().trim();


// const fs = require('fs'); 
// let input = fs.readFileSync("/dev/stdin").toString().trim();

input = input.split('\n')
const Code = input[0].split('')
let dp = new Array(Code.length + 1).fill(0)

dp[0]=1;
dp[1] = 1;
let noAnswer = false;

if (Code[0] === '0') {
  noAnswer = true;
}

for (let i = 2; i <= Code.length; i++) {
  if (parseInt(Code[i - 1]) === 0) {
    if (parseInt(Code[i - 2]) === 0) {
      noAnswer = true;
    }else if (parseInt(Code[i - 2] + Code[i - 1] )>=10
    &&parseInt(Code[i - 2] + Code[i - 1] )<=26) {
      dp[i] = dp[i - 2];
    }
  } else {
    if (parseInt(Code[i - 2] + Code[i - 1]) >=10 
    && parseInt(Code[i - 2] + Code[i - 1]) <= 26) {
      dp[i] = (dp[i - 2] + dp[i - 1]) % 1000000
    } else {
      dp[i] = dp[i - 1]
    }
  }
}


if (noAnswer === true) {
  console.log(0)
} else {
  console.log(dp[Code.length]%1000000)
}

🧵 참고한 정답지 🧵

💡💡 기억해야 할 점 💡💡

  1. dp 문제를 풀 때마다 dp[i]과 input[i]을 혼동하는 경우가 많다. 반드시 고쳐야 한다.
  2. 인덱스 잘 생각해야 한다.
  3. 문제를 어떻게 풀지 계획을 세워야 한다.
profile
이건 대체 어떻게 만든 거지?

0개의 댓글