알고리즘

프로그래머스 멀리 뛰기 (JAVA)

박카스마시며코딩 2022. 6. 17. 14:36

https://programmers.co.kr/learn/courses/30/lessons/12914

 

코딩테스트 연습 - 멀리 뛰기

효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2

programmers.co.kr

 

저는 해당 문제를 dp를 이용하여 문제를 해결하였습니다.

저는 DP를 통해 해당 위치까지 가는데 몇개의 경로가 있는지 저장하였습니다.

 

import java.util.*;
class Solution {
    private static final int LIMIT = 1234567;
    private static final long NOT_VALID = -1L;
    public long solution(int n) {
        long[] dp = new long[n+1];
        Arrays.fill(dp,NOT_VALID);
        long answer = dfs(0,n,dp) ;
        return answer;
    }
    private long dfs(int position, int n,long[] dp){
        if(position == n){
            return 1;
        }
        if(dp[position] != NOT_VALID){
            return dp[position];
        }
        long result = 0;
        for(int i = 1 ; i <= 2 ; i++){
            if(position + i <= n){
                result += dfs(position + i,n,dp);
                result %= LIMIT;
            }
        }
        dp[position] = result;
        return result;
    }
}