Skip to content

[정봉찬] 10-2. 돌다리 건너기#224

Open
devwqc wants to merge 2 commits intofraudgroup:mainfrom
devwqc:정봉찬/10-2.돌다리-건너기

Hidden character warning

The head ref may contain hidden characters: "\uc815\ubd09\ucc2c/10-2.\ub3cc\ub2e4\ub9ac-\uac74\ub108\uae30"
Open

[정봉찬] 10-2. 돌다리 건너기#224
devwqc wants to merge 2 commits intofraudgroup:mainfrom
devwqc:정봉찬/10-2.돌다리-건너기

Conversation

@devwqc
Copy link
Contributor

@devwqc devwqc commented Sep 8, 2024

✔ 문제 제목: 돌다리 건너기

✔ 문제 유형: 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

💡 시간복잡도

  • O(2^n)

💡 틀린 이유와 틀린 부분 수정 or 다른 풀이

  • ⭐ 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(solution2(7)); // 34

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant