[PROG] 12914 멀리뛰기 (피보나치)

호호빵·2022년 10월 27일
0

Algorithm

목록 보기
40/46

문제

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

나의 풀이

class Solution {
    public long solution(int n) {
        long answer = 0;
        List<Integer> list = new ArrayList<>();

        list.add(0);
        list.add(1);
        list.add(2);

        for (int i = 3; i < n+1; i++) {
            list.add(list.get(i-2) % 1234567 + list.get(i-1) % 1234567);
        }

        answer = list.get(n) % 1234567;

        return answer;
    }
}


피보나치 수

1칸까지 뛰는 방법은 1가지, 2칸까지 뛰는 방법이 2가지인 것은 쉽게 알 수 있다.
이제 n칸까지 뛰는 방법은 다음과 같이 생각해 보자.

- [n - 1]번째 칸에서 1칸을 뛰어서 n번째 칸에 도착
- [n - 2]번째 칸에서 2칸을 뛰어서 n번째 칸에 도착

첫 번째 방법은 마지막에 1칸을 뛰어서 도착했고, 
두 번째 방법은 마지막에 2칸을 뛰어서 도착했기 때문에, 위 두가지 방법 중 서로 중복되는 경우는 없다.
따라서 n번째 칸으로 뛰는 방법의 수는 
[n-1]번째 칸으로 뛰는 방법 수 + [n-2]번째 칸으로 뛰는 방법의 수가 됨 
  -> 피보나치 수열과 동일
profile
하루에 한 개념씩

0개의 댓글