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

HeavyJ·2023년 1월 23일
0

프로그래머스

목록 보기
3/7

멀리뛰기

문제풀이

다이나믹 프로그래밍 문제다.
한 번에 1칸, 혹은 2칸 이동이 가능하다.
dp[i] 가 i번째에서 칸 이동까지 최대 개수의 방법을 나타낸다면
dp[i-1]에서 1칸 이동하는 경우와 dp[i-2]에서 2칸 이동하는 경우의 합과 같다.
따라서 점화식은 dp[i] = dp[i-1] + dp[i-2]로 나타낼 수 있다.

단, 이 문제에서 조심해야 할 점은 반복문을 다 마치고 1234567로 나누면 에러가 발생하므로 반복문 안에서 1234567로 나눠 정답을 맞추는 방식을 사용해야한다.

구현코드

class Solution {
    public long solution(int n) {
        long answer = 0;

        // 멀리 뛰기 연습
        // 효진이는 한 번에 1칸, 또는 2칸 가능
        // 칸이 총 4개 있을 때
        // 1 1 1 1
        // 1 2 1
        // 1 1 2
        // 2 1 1
        // 2 2
        // 5가지 방법 가능


        int[] dp = new int[n+1];

        dp[1] = 1;

        // n이 1인 경우
        if(n==1){
            return 1;
        }

        dp[2] = 2;

        // n이 2인 경우
        if(n==2){
            return 2;
        }

        else{
            for(int i = 3 ;i<=n; i++){
                dp[i] = (dp[i-1] + dp[i-2]) % 1234567;
            }

            answer = dp[n];

            return answer;
        }
    }
}

간단한 다이나믹 프로그래밍 문제로 dp 문제 입문에 좋을 것 같다.

profile
There are no two words in the English language more harmful than “good job”.

0개의 댓글