Coding Test

[Coding Test] 프로그래머스 2단계 - 멀리 뛰기

한비Skyla 2024. 12. 8. 21:22

📚 문제

 

✏️ 메모 

 

n = 1 일 때, 1 >> 1
n = 2 일 때, (1, 1), (2) >> 2
n = 3 일 때, (1, 1, 1), (2, 1), (1, 2) >> 3
n = 4 일 때, (1, 1, 1, 1), (2, 1, 1), (1, 2, 1), (1, 1, 2), (2, 2) >> 5
n = 5 일 때, (1, 1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 2, 1), (1, 2, 1, 1), (2, 1, 1, 1), (1, 2, 2), (2, 1, 2), (2, 2, 1) >> 8 
1 2 3 5 8 .... 피보나치 수열 

 

Java 피보나치(Fibonacci) 수열 제대로 풀기

오늘은 알고리즘 단골 문제인 피보나치 수열 풀이법에 대해 알아보려고 합니다. 피보나치 수열은 면접 현장에서 손 코딩으로 배열 또는 재귀 함수로 풀어보고 성능을 물어보기도 하기 때문에,

binco.tistory.com

✏️ 메모 

왜 1234567 을 나누는가? 

- 모든 연산이 그대로 진행되고, 결과가 큰 값으로 커질 수 있음. 입력값이 커지면 오버프로우 위험에 노출됨. 

- 지수적으로 커지는 피보나치 수열이 1234567을 넘지 않도록 제한 함. 

- 다른 숫자는 안되는가? 됨. 오버플로우를 방지할 수 있을만큼 크지만 계산 효율성이 있을만큼 작은 소수 일 뿐. 

 

피보나치 문제 풀 때 왜 1234567로 나눈 나머지를 사용해야 하는가

프로그레머스 Lv.2 피보나치 수 문제다. 피보나치 n번째 자리 수를 1234567로 나눈 나머지 값을 구하라는 문제였다 (n은 2 이상). 왜 나누어야 하는걸까? 힌트를 보니 n이 커질수록 리턴해야 하는 값

itgoblin.tistory.com

 

🔎 문제해결

class Solution {
    public long solution(int n) {
        long answer = 0;
        
        long num1 = 1;
        long num2 = 1;
        
        long result = 0;
        
        if (n == 1 ) return 1;
        
        for (int i = 2; i <= n; i ++) {
            // 피보나치 수열 
            result = (num1 + num2) % 1234567;
            num1 = num2;
            num2 = result;
        }
        
        
        return result;
    }
}