728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/12945
풀이
n이 최대 100000이기 때문에 엄청나게 큰 수가 만들어지게 되어 일반적인 피보나치를 계산하는 로직으로는 오버플로우가 발생하게 된다. 그렇기 때문에 fibo[n]%1234567 = (fibo[n-1] + fibo[n-2])%1234567 식을 활용하여 코드를 작성한다. 또한 메모이제이션을 사용하여 시간 초과를 방지한다.
import java.util.*;
class Solution {
int[] fibo;
public int solution(int n) {
fibo = new int[n+1];
return dfs(n);
}
private int dfs(int n) {
if(fibo[n] > 0) return fibo[n];
if(n == 0) return 0;
if(n == 1) return fibo[1] = 1;
return fibo[n] = (dfs(n-1) + dfs(n-2))%1234567;
}
}
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 땅따먹기 - 자바(Java), DP(Dynamic Programming) (0) | 2022.01.10 |
---|---|
[프로그래머스] 최솟값 만들기 - 자바(Java) (0) | 2022.01.08 |
[프로그래머스] 카펫 - 자바(Java) (0) | 2022.01.03 |
[프로그래머스] 튜플 - 자바(Java), 2019 카카오 개발자 겨울 인턴십 (0) | 2021.10.22 |
[프로그래머스] 행렬 테두리 회전하기 - 자바(Java), 구현, 2021 Dev-Matching: 웹 백엔드(상반기) (0) | 2021.10.21 |
댓글