[프로그래머스,Level 2] 피보나치 수 (JAVA 구현)

2021. 1. 26. 14:37·CodingTest/프로그래머스(Programmers)
반응형

- 첫 풀이 및 정답풀이

  재귀를 통해 간단하게 풀 수 있는 대표적인 문제인 피보나치 수를 구하는 문제이다. 단, 문제에서 피보나치 수를 1234567로 나눈 나머지를 원하며, n의 범위가 100000 이하 이므로 dp를 활용해 풀어야 한다. 

 

  dp를 활용해 중복되는 계산과정을 반복하지 않고, 한 번만 계산을 수행해 해당 값을 저장해 둔 뒤 참조만 하는 형식으로 진행하면 된다. 과정은 아래와 같다.

 

  1. 피보나치 수 0은 0, 1은 1이므로 재귀메소드로 들어온 값이 0이면 0, 1이면 1을 반환한다.

  2. 2 부터는 초기의 dp 배열에 값이 존재하지 않으므로 dp [2] = ( fibonacci(n-1) + fibonacci(n-2) ) % 1234567;을 수행한다. 

  3. 3은 fibonacci(2)+fibonacci(1) 이므로 각각 dp [2], 1을 더해 dp [3]에 저장한다. 

 

  위 과정을 반복하면 원하는 자연수의 피보나치 수를 구할 수 있다.

 

class Solution {
    // 1. 피보나치 수를 참조할 메모이제이션.
    static int dp[] = new int[100001];
    
    // 2. 피보나치 메소드
    public static int fibonacci(int n){
        // 3. 0인 경우는 0을 반환.
        if(n == 0) return 0;
        // 4. 1인 경우는 1을 반환.
        if(n == 1) return 1;
        
        // 5. dp[n]에 아직 값이 없다면, 아래의 식을 수행.
        if(dp[n] == 0)
            dp[n] = (fibonacci(n-1)+ fibonacci(n-2)) % 1234567;
        
        // 6. 값이 있다면 dp의 값을 참조해 바로 반환.
        return dp[n];
    }
    
    public int solution(int n) {
        int answer = 0;
        
        // 7. 피보나치 수를 저장.
        answer = fibonacci(n);
        
        return answer;
    }
}

 

 

저작자표시
'CodingTest/프로그래머스(Programmers)' 카테고리의 다른 글
  • [프로그래머스,Level 2] JadenCase 문자열 만들기 (JAVA 구현)
  • [프로그래머스,Level 2] 행렬의 곱셈 (JAVA 구현)
  • [프로그래머스,Level 2] 최솟값 만들기 (JAVA 구현)
  • [프로그래머스,Level 2] 최댓값과 최솟값 (JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    Easy
    백준
    component-scan
    백준7576
    meidum
    BOJ
    boj1427
    TypeScript
    알고리즘
    medium
    백준2751
    next 14
    leetcode 2236
    프로그래머스
    백준1260
    백준1427
    백준7576자바
    Java
    boj2108
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[프로그래머스,Level 2] 피보나치 수 (JAVA 구현)
상단으로

티스토리툴바