멀리 뛰기

하이솝·2026년 3월 30일

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하면 됩니다.

제한 사항

  • n은 1 이상, 2000 이하인 정수입니다.

입출력 예


문제 풀이

1차 실행 오류


answerint로 표현할 수 있는 수의 범위를 넘어가서
오버플로우가 발생함. 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;
    }
}

나의 코드

소요 시간: 20분


수학적으로 문제를 풀어보기 위해 규칙을 찾았음.
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;
    }
}

AI 코드


예외 처리는 따로 받고, 루프 범위가 직관적이지 않은 부분을 수정함

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;
    }
}

0개의 댓글