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

문제를 보고 DFS문제인걸 알고 쉽게 구현은 했지만 테스트 케이스에 시간초과가 많이 떠서 최적화를 실시해야하는 문제가 생겼다.
class Solution {
long sum = 0;
public long solution(int n) {
long answer = 0;
dfs(n);
answer = sum%1234567;
return answer;
}
public void dfs(int n) {
if(n == 0){
sum += 1;
return;
}
else if(n < 0) {
return;
}
else {
dfs(n-1);
dfs(n-2);
}
}
}
그래서 배열로 최적화를 하여 구현해보았다.
class Solution {
public long solution(int n) {
long answer = 0;
long dfs[] = new long[2001];
dfs[1] = 1;
dfs[2] = 2;
for(int i=3; i<2001; i++){
dfs[i] = (dfs[i-1] + dfs[i-2]) % 1234567;
}
return dfs[n];
}
}
훨씬 빠른 성능을 볼 수 있었다.