diff --git "a/10. Dynamic programming(\353\217\231\354\240\201\352\263\204\355\232\215\353\262\225)/02. \353\217\214\353\213\244\353\246\254 \352\261\264\353\204\210\352\270\260/\354\240\225\353\264\211\354\260\254/index.js" "b/10. Dynamic programming(\353\217\231\354\240\201\352\263\204\355\232\215\353\262\225)/02. \353\217\214\353\213\244\353\246\254 \352\261\264\353\204\210\352\270\260/\354\240\225\353\264\211\354\260\254/index.js" index 2fba9465..5b9ae03c 100644 --- "a/10. Dynamic programming(\353\217\231\354\240\201\352\263\204\355\232\215\353\262\225)/02. \353\217\214\353\213\244\353\246\254 \352\261\264\353\204\210\352\270\260/\354\240\225\353\264\211\354\260\254/index.js" +++ "b/10. Dynamic programming(\353\217\231\354\240\201\352\263\204\355\232\215\353\262\225)/02. \353\217\214\353\213\244\353\246\254 \352\261\264\353\204\210\352\270\260/\354\240\225\353\264\211\354\260\254/index.js" @@ -1,7 +1,82 @@ +/* +✅문제 제목: 돌다리 건너기 + +✅문제 유형: DP + +✅문제 풀이 날짜: 2024-09-09 + +💡문제 분석 요약 + - N개의 돌다리가 있다. + - 돌다리를 건널 때 한 번에 한 칸 또는 두 칸씩 건너뛰면서 건널 수 있다. + - 돌다리를 건너는 방법은 몇 가지인가? + - 돌의 개수 자연수 N(3<=N<=45) + +💡알고리즘 설계 + - ⭐ DFS 풀이. + - 재귀함수는 레벨(현재 돌 위치)를 매개변수로 가진다. + - 첫 재귀함수 호출에 0을 인수로 전달한다. + - 레벨이 n보다 크거나 같으면 answer을 1더하고 return한다. + - 재귀함수를 레벨 + 1, 레벨 + 2로 호출한다. +*/ + function solution(n) { let answer = 0; + function DFS(L) { + if (L >= n) { + answer++; + return; + } + + DFS(L + 1); + DFS(L + 2); + } + + DFS(0); + + return answer; +} + +console.log(solution(7)); // 34 + +/* +✅문제 제목: 돌다리 건너기 + +✅문제 유형: DP + +✅문제 풀이 날짜: 2024-09-09 + +💡문제 분석 요약 + - N개의 돌다리가 있다. + - 돌다리를 건널 때 한 번에 한 칸 또는 두 칸씩 건너뛰면서 건널 수 있다. + - 돌다리를 건너는 방법은 몇 가지인가? + - 돌의 개수 자연수 N(3<=N<=45) + +💡알고리즘 설계 + - ⭐ DP 풀이. + - 1번 돌을 건너는 방법 1가지. + - 2번 돌을 건너는 방법 2가지. + - 3번 돌을 건너는 방법 1번 돌에서 건너는 방법과 2번 돌에서 건너는 방법. 3가지 + - ... + - n번 돌을 건너는 방법 n - 2번 돌에서 건너는 방법과 n - 1번 돌에서 건너는 방법 + - n + 1을 육지라고 했을 때 n - 1과 n을 건너는 방법을 더하면 된다. +*/ + +function solution2(n) { + let answer = 0; + + const dy = Array.from({ length: n + 1 }, () => 0); + + dy[1] = 1; + dy[2] = 2; + + for (let i = 3; i <= n; i++) { + dy[i] = dy[i - 2] + dy[i - 1]; + } + + answer = dy[n - 1] + dy[n]; + return answer; } -console.log(solution(7)); +console.log(solution2(7)); // 34