Make Unreal REAL.
article thumbnail
Level 2. 멀리 뛰기

 

 

피보나치 수열이다.

 

n번째 칸에 도달하는 방법은, 1칸 + (n - 1)번째에 도달하는 경우의 수와 2칸 + (n - 2)번째에 도달하는 경우의 수를 더한 것이다.

 

재귀를 활용하면 중복 계산이 여러 번 발생하므로 시간 초과가 발생한다.

 

// 이 풀이는 시간 초과가 발생한다.
#include <iostream>

using namespace std;

long long rSolution(int n)
{
    if (n < 0)
        return 0;
    else if (n == 0)
        return 1;

    return rSolution(n - 1) + rSolution(n - 2);
}

long long solution(int n)
{
    return rSolution(n) % 1234567;
}

 

메모이제이션(혹은 DP)을 활용하면 하나의 경우에 대해 1번 만 계산할 수 있다.

 

#include <iostream>

using namespace std;

long long solution(int n)
{
    long long arr[2001] = {1, 1, };

    for (int i = 2; i <= n; ++i)
        arr[i] = (arr[i - 1] + arr[i - 2]) % 1234567;

    return arr[n];
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 2. 점프와 순간 이동  (0) 2023.06.01
Level 2. H-Index  (0) 2023.05.31
Level 2. 점 찍기  (0) 2023.05.29
Level 0. 특별한 이차원 배열 1  (0) 2023.05.28
Level 0. 조건 문자열  (0) 2023.05.27
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그