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

answer가 int로 표현할 수 있는 수의 범위를 넘어가서
오버플로우가 발생함. Level 2의 피보나치 수와 같은 오류
class Solution {
public int solution(int n) {
int answer = 0;
int a = 1, b = 2;
if (n <= 3) {
return n;
}
for (int i = 0; i < n - 2; i++) {
answer = a + b;
a = b;
b = answer;
}
return answer % 1234567;
}
}
수학적으로 문제를 풀어보기 위해 규칙을 찾았음.
5일 때 경우의 수는 8개, 6일 때 13이 나오는 것을 보고,
피보나치 수를 띄고 있다는 사실을 통해 피보나치 수열을 구현해서 해결함.
class Solution {
public int solution(int n) {
int answer = 0;
int a = 1, b = 2;
if (n <= 3) {
return n;
}
for (int i = 0; i < n - 2; i++) {
answer = (a + b) % 1234567;
a = b;
b = answer;
}
return answer;
}
}
예외 처리는 따로 받고, 루프 범위가 직관적이지 않은 부분을 수정함
class Solution {
public int solution(int n) {
if (n <= 1) return n;
long a = 0, b = 1;
for (int i = 2; i <= n; i++) {
long temp = (a + b) % 1234567;
a = b;
b = temp;
}
return (int) b;
}
}