Contents

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

Contents

https://programmers.co.kr

문제:

효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 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하면 됩니다.

풀이:

1칸 있을 때, 1가지, 2칸 있을 때, 2가가지, 3칸 있을 때, 1칸의 가짓수+ 2칸의 가짓수 = 3칸

…… n칸 있을 때, (n - 1)칸의 가짓수 + (n - 2)칸의 가짓수

수가 너무 크게 증가할 수 있으므로 1234567로 나눈 나머지를 리턴한다.

코드:

사용언어 : c++

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <string>
#include <vector>

using namespace std;

long long solution(int n) {
    vector<long long> a = { 0, 1, 2 };
    for(int i = 3; i <= n; i++)
        a[i % 3] = (a[(i - 1) % 3] + a[(i - 2) % 3]) % 1234567;
    return a[n % 3];
}