카테고리 없음
[프로그래머스 12945] Level2 피보나치 수
윤라프
2022. 9. 13. 22:34
문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/12945
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이 Key Point
- 재귀 호출에 대해 반복되는 동일 연산에 대한 처리를 고민해야한다.(시간초과와 관련됨)
- 결과를 1234567로 나누라는 요구사항이 있다.
피보나치 수의 점화식을 세우면 F(n) = F(n-1) + F(n-2) (F(n) = 0, F(n) = 1)이다.
따라서 (A + B)%C = ((A % C) + (B % C)) % C라는 공식을 이용할 필요가 있다.
(또는 계산된 결과에서 나눈다면 계산 과정이 int 범위를 넘어가기 때문에 type을 long으로 선언하는 방법이 있다.)
Java 문제풀이
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
|
class Solution {
private static final int FIBONACCI_REMINDER = 1234567;
public int solution(int n) {
int[] saved = new int[n + 1];
int answer = fibonacci(saved, n);
return answer;
}
private int fibonacci(int[] saved, int n) {
if (n == 1) {
saved[n] = 1;
return 1;
}
if (n == 0) {
saved[n] = 0;
return 0;
}
if (saved[n] != 0) {
return saved[n];
}
saved[n] = (fibonacci(saved, n - 2)%FIBONACCI_REMINDER
+ fibonacci(saved, n - 1)%FIBONACCI_REMINDER)%FIBONACCI_REMINDER; return saved[n];
}
}
|
cs |