프로그래머스[멀리 뛰기]js

이유정·2023년 6월 1일
0

문제 설명

효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.

제한 사항

n은 1 이상, 2000 이하인 정수입니다.

입출력 예

나의 문제 풀이 코드

function solution(n) {
    let dy = Array.from({length:n+1}, ()=> 0) //배열생성 후, 0 값을 다 넣는다. 
    dy[1] = 1 // n이 1일 때 1칸으로 도착하는 방법 1가지
    dy[2] = 2 // n이 2일 때 도착하는 방법 2가지
    for(let i=3; i<=n; i++){
        dy[i] = (dy[i-2] + dy[i-1]) %1234567
    }
    return dy[n] 
}

풀이 설명

한칸 혹은 두칸 이동 하는 문제는 다이나믹 프로그래밍 알고리즘을 생각하는 것이 좋다.

1번으로 가는 방법은 1칸으로 이동하는 방법뿐이다. => 1가지

2번으로 가는 방법은 1칸으로 두번, 2칸으로 한번에 가는 방법이 있다. => 2가지

자, 잘 생각해보자 3번으로 가는 방법은 몇가지 일까?
3번으로 가려면, 1번에서 출발하거나 2번에서 출발해야만 한다.
왜냐하면 1칸, 2칸으로밖에 이동하지 못하기 때문이다.
그러면 3번으로 이동하는 방법은
1번으로 이동하는 방법과 2번으로 이동하는 방법을 더한 값이 된다.


배열을 만들어주고, 0값으로 각 배열을 넣어준다.

배열의 i가 1일 때 1값을, 2일 때 2 값을 넣어준다.

반복문을 돌려서 (i-2) + (i-1)의 값을 넣어준다.

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글