프로그래머스 2레벨 12945 피보나치수(메모라이제이션)

문제

링크 : https://programmers.co.kr/learn/courses/30/lessons/12945

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.

예를들어

  • F(2) = F(0) + F(1) = 0 + 1 = 1
  • F(3) = F(1) + F(2) = 1 + 1 = 2
  • F(4) = F(2) + F(3) = 1 + 2 = 3
  • F(5) = F(3) + F(4) = 2 + 3 = 5

와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

풀이

오랜만에 다시 푼 피보나치 문제

n이 100000이하일 수 있는데 일반적인 피보나치로는 끝이나지 않아 통과하지 못할 것

따라서 메모라이제이션 기법을 써서 풀어야함

n이 크면 계산된 수가 커질 수 있는데 문제에서 나누라고한 값으로 나눈 나머지를 저장해주면 됨

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Arrays;

class Solution {
int MAX = 100000+1;
int dp[] = new int[MAX];
int divNum = 1234567;
int fibo(int n)
{
if(n == 0)
{
return 0;
}
if(n == 1)
{
return 1;
}

if(dp[n-1]== -1)
{
dp[n-1] = fibo(n-1) % divNum;
}

if(dp[n-2] == -1)
{
dp[n-2] = fibo(n-2) % divNum;
}

return (dp[n-2] + dp[n-1]) % divNum;
}

public int solution(int n) {
int answer = 0;
Arrays.fill(dp, -1);
answer = fibo(n);

return answer;
}
}

메모

어렵지 않은 문제였음

프로그래머스 2레벨 12945 피보나치수(메모라이제이션)

https://praisebak.github.io/2021/07/15/2021-07/p12945/

Author

Praisebak

Posted on

2021-07-15

Updated on

2021-07-14

Licensed under

Comments