
class Solution {
public long solution(int n) {
long answer = 0;
long[] l = new long[n + 2]; // 1
l[0] = 0;
l[1] = 1;
l[2] = 2;
for (int i = 3; i <= n; i++) { // 2
l[i] = (l[i - 1] + l[i - 2]) % 1234567;
}
return answer = l[n];
}
}
피보나치 수열로 풀 수 있다
1. l의 크기와 초기 값 0번째, 1번째, 2번째를 설정한다
2. 3번째부터 n번째까지 i-1과 i-2를 더한 값을 1234567로 나눈다
l의 크기를 n + 2로 설정하는 이유 : n+1로 배열의 크기를 설정하면, 배열의 인덱스는 0부터 n까지이고, 문제가 없으며, 실제로 많은 상황에서 n+1 크기의 배열을 사용하여 문제를 해결할 수 음. 그러나 초기값으로 l[2]까지 값을 설정해주고 시작하는 특수한 경우(ex: 피보나치 수열, 계단 오르기 문제 등)에는 n+2를 설정함으로써 모든 경우의 수를 명확하게 처리할 수 있고, 코드의 가독성과 일관성을 높일 수 있음
class JumpCase {
public int jumpCase(int num) {
int answer = 0;
if (num <= 2) return num;
answer = jumpCase(num-1) + jumpCase(num-2);
return answer;
}
public static void main(String[] args) {
JumpCase c = new JumpCase();
int testCase = 2;
//아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println(c.jumpCase(testCase));
}
}