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

윤준혁·2024년 4월 3일

나의 풀이

class Solution {
    public long solution(int n) {
        long answer = 0;
        long[] l = new long[n + 2]; // 1
        l[0] = 0;
        l[1] = 1;
        l[2] = 2;
        
        for (int i = 3; i <= n; i++) { // 2
            l[i] = (l[i - 1] + l[i - 2]) % 1234567;
        }
        
        return answer = l[n];
    }
}

과정

피보나치 수열로 풀 수 있다
1. l의 크기와 초기 값 0번째, 1번째, 2번째를 설정한다
2. 3번째부터 n번째까지 i-1과 i-2를 더한 값을 1234567로 나눈다

l의 크기를 n + 2로 설정하는 이유 : n+1로 배열의 크기를 설정하면, 배열의 인덱스는 0부터 n까지이고, 문제가 없으며, 실제로 많은 상황에서 n+1 크기의 배열을 사용하여 문제를 해결할 수 음. 그러나 초기값으로 l[2]까지 값을 설정해주고 시작하는 특수한 경우(ex: 피보나치 수열, 계단 오르기 문제 등)에는 n+2를 설정함으로써 모든 경우의 수를 명확하게 처리할 수 있고, 코드의 가독성과 일관성을 높일 수 있음

다른 사람 풀이

class JumpCase {

    public int jumpCase(int num) {
        int answer = 0;

        if (num <= 2) return num;
                answer = jumpCase(num-1) + jumpCase(num-2);      

        return answer;
    }

    public static void main(String[] args) {
        JumpCase c = new JumpCase();
        int testCase = 2;
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println(c.jumpCase(testCase));
    }
}

0개의 댓글