[프로그래머스][Level2][Java] 피보나치 수

2022. 3. 7. 18:07·프로그래머스/Level 2

문제

 

풀이 코드

public int solution(int n) {
    return fibo(n)%1234567;
}
public int fibo(int n){
    int re = 0;
    int[] arr = new int[n+1];
    if(n==1){
        return arr[n] = 1;
    }else if(n == 2){
        return arr[n] = 1;
    }else{
        return arr[n] = fibo(n-1)+fibo(n-2);
    }
}

처음에는 일반적인 피보나치 문제인 줄 알고 그냥 이렇게 풀었다. 근데...

이렇게 시간초과로 실패를 했다. 그래서 뭐지 하고 생각을 해봤는데 피보나치 수열은 생각해보니 n이 커질수록 숫자가 급격하게 늘어서 int의 범위가 감당할 수 없을 정도로 커지면 오류가 나겠다. 싶어서 Long으로 바꿔야 하나?라는 생각이 들었지만 시간 초과의 문제를 보고 그냥 재귀함수의 문제 같아서 그냥 for문으로 돌렸다.

public long solution(int n) {
        long prev1 = 1L, prev2 = 1L;
        long answer = 1L;
        if(n==1){
            return 1;
        }else if(n==2){
            return 1;
        }else{
            for(int i = 2;i<n;i++){
                answer = prev1 + prev2;
                prev1 = prev2;
                prev2 = answer;    
            }
        }
        return answer%1234567;
    }

이번에는 성공했을 꺼라 믿고 돌렸는데?

또 실패...생각해보니 Long의 인식범위를 피보나치 수열이 벗어나도 오류가 뜨는 거였다...그래서 이리저리 생각하다가

어떤 분께서 (A+B) % C가 ((A%C) + (B%C))%C로 바꿀 수 있다고 하셔서 이거보고 오오 하면서 코드를 다시 바꿨다.

public long solution(int n) {
    long prev1 = 1L, prev2 = 1L;
    long answer = 1L;
    if(n==1){
        return 1;
    }else if(n==2){
        return 1;
    }else{
        for(int i = 2;i<n;i++){
            answer = prev1%1234567 + prev2%1234567;
            prev1 = prev2;
            prev2 = answer;
        }
    }
    return answer%1234567;
}

결과는?

성공~

일반적인 피보나치 수열인 줄 알고 풀었다가 새로운 것을 알게 되어서 좋았다!

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 숫자의 표현  (0) 2022.03.08
[프로그래머스][Level2][Java] 최솟값 만들기  (0) 2022.03.07
[프로그래머스][Level2][Java] 행렬의 곱셈  (0) 2022.03.07
[프로그래머스][Level2][Java] JadenCase 문자열 만들기  (0) 2022.03.06
[프로그래머스][Level2][Java] N개의 최소공배수  (0) 2022.03.06
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 숫자의 표현
  • [프로그래머스][Level2][Java] 최솟값 만들기
  • [프로그래머스][Level2][Java] 행렬의 곱셈
  • [프로그래머스][Level2][Java] JadenCase 문자열 만들기
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 피보나치 수
    상단으로

    티스토리툴바