[백준] 10870번 : 피보나치 수 5 (브론즈 Ⅱ) - Java/자바

2025. 7. 3.·Problem Solving (Java)/백준
반응형


✅ 문제

문제링크

🔗 https://www.acmicpc.net/problem/10870

 


✅ 풀이

🔹 코드 1 (재귀 호출)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        System.out.println(fibonacci(n));
    }

    public static int fibonacci(int n) {
        if (n == 0) return 0;
        if (n == 1) return 1;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

 

이 문제는 피보나치의 수열에 관한 문제이다.

피보나치의 수열은 다음 식으로 표현할 수 있다.

$F_{\;n}\;=\;F_{\;n\;-\;1}\;+\;F_{\;n\;-\;2}\;(n\;\leq\;2)$

재귀 호출을 사용해 해결해보자.

 

n을 입력받고 0번째부터 시작해서 n번째 피보나치의 수를 출력해야한다.

fibonacci(n)의 반환값을 출력해주도록 한다.

 

fibonacci (int n) 메서드

n번째 피보나치의 수를 구해 int로 반환하는 메서드이다.

if문에 조건을 n == 0일 때는 return 0;하고 if문에 조건을 n == 1일 때는 return 1;을 한다.

아닌 경우에는 return fibonacci(n - 1) + fibonacci(n - 2);하여 재귀 호출을 하도록 한다.

 

🔹 결과 1

 

🔹 코드 2 (반복문)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        int fibonacci = 1;
        if (n == 0) {
            fibonacci = 0;
        }
        int prev = 0;
        int temp = 0;
        for (int i = 2; i <= n; i++) {
            temp = fibonacci;
            fibonacci += prev;
            prev = temp;
        }
        System.out.println(fibonacci);
    }
}

 

피보나치 수열을 반복문을 사용해 해결해보자.

 

n을 입력받고 int fibonacci = 1;로 선언한다.

if문에 조건을 n == 0하여 n이 0일때는 fibonacci = 0;하도록 한다.

int prev = 0;하여 이전 값을 저장할 변수를 선언하고 int temp = 0;하여 temp에는 이전의 피보나치의 수를 저장할 용도로 선언한다.

 

for문을 i = 2부터 n보다 작거나 같을 동안 반복하고 temp = fibonacci;하여 temp에 우선 이전 fibonacci의 값을 저장한다.

fibonacci += prev;하여 이전 값을 더해 피보나치의 수를 구하고 prev = temp;하여 이전 피보나치의 수를 저장한다.

즉, 여기서 n번째 피보나치의 수를 구할 때 더하기 전의 fibonacci는 n - 1번째, prev는 n - 2번째 피보나치의 수 역할을 한다.

 

반복이 모두 종료되면 fibonacci를 출력해주도록 한다.

 

🔹 결과 2

 

🔹 코드 3 (int 배열, 반복문)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] fibonacci = new int[n + 1];

        for (int i = 0; i <= n; i++) {
            if(i == 0) fibonacci[0] = 0;
            else if(i == 1) fibonacci[1] = 1;
            else fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
        }
        System.out.println(fibonacci[n]);
    }
}

 

int 배열을 사용해 해결해보도록 하자.

 

n을 입력받고 0번째부터 시작하므로 배열 크기를 n + 1로 생성하도록 한다.

int[] fibonacci = new int[n + 1];하여 int 배열을 생성한다.

 

for문을 i = 0부터 n보다 작거나 같을 동안 반복한다.

if문에 조건을 i == 0하여 i가 0일 때는 fibonacci[0] = 0;하여 저장한다.

else if문에 조건을 i == 1하여 i가 1일 때는 fibonacci[1] = 1;하여 저장한다.

이외의 경우에는 fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];하여 계산해주도록 한다.

 

반복이 종료되면 fibonacci[n]을 출력해주도록 한다.

 

🔹 결과 3

 

🔹알게된 정보

    • 피보나치의 수를 구하는 방법을 재귀 호출과 반복문, int 배열을 사용한 반복문을 통해 구현해보았다.

 


반응형
저작자표시 비영리 동일조건 (새창열림)

'Problem Solving (Java) > 백준' 카테고리의 다른 글

[백준] 24060번 : 알고리즘 수업 - 병합 정렬 1 (실버 Ⅲ) - Java/자바  (0) 2025.07.06
[백준] 25501번 : 재귀의 귀재 (브론즈 Ⅱ) - Java/자바  (2) 2025.07.04
[백준] 20920번 : 영단어 암기는 괴로워 (실버 Ⅲ) - Java/자바  (0) 2025.07.03
[백준] 2108번 : 통계학 (실버 Ⅱ) - Java/자바  (0) 2025.07.03
[백준] 11050번 : 이항 계수 1 (브론즈 Ⅰ) - Java/자바  (2) 2025.06.30
'Problem Solving (Java)/백준' 카테고리의 다른 글
  • [백준] 24060번 : 알고리즘 수업 - 병합 정렬 1 (실버 Ⅲ) - Java/자바
  • [백준] 25501번 : 재귀의 귀재 (브론즈 Ⅱ) - Java/자바
  • [백준] 20920번 : 영단어 암기는 괴로워 (실버 Ⅲ) - Java/자바
  • [백준] 2108번 : 통계학 (실버 Ⅱ) - Java/자바
sunghyun.dev
sunghyun.dev
개발 공부를 기록하는 블로그입니다.
  • sunghyun.dev
    개발 공부 기록 블로그
    sunghyun.dev
  • 전체
    오늘
    어제
    • 전체 글 (61)
      • Problem Solving (Java) (51)
        • 백준 (51)
        • 프로그래머스 (0)
      • Computer Science (2)
        • 자료구조 (0)
        • 알고리즘 (2)
        • 컴퓨터 구조 (0)
        • 운영체제 (0)
        • 컴퓨터 네트워크 (0)
      • Language (7)
        • Java (7)
        • Kotlin (0)
        • Python (0)
      • Framework (0)
        • Spring (0)
        • Node.js (0)
        • Vue.js (0)
        • React (0)
      • DBMS (0)
        • 데이터베이스 (0)
        • MySQL (0)
        • Oracle (0)
        • MariaDB (0)
      • Git (0)
      • Web (0)
      • Cloud (0)
      • 자격증 (0)
        • SQLD (0)
        • 정보처리기사 (0)
        • 오픽 (0)
        • AICE (0)
      • Toy Project (0)
      • IDE (0)
        • IntelliJ IDEA (0)
      • 기타 (0)
      • Tistory (1)
  • 링크

    • Github
    • Notion
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 인기 글

  • 태그

    문자열
    배열
    브루트포스
    재귀함수
    이진탐색
    알고리즘
    카운팅정렬
    Deque
    Comparator
    덱
    스택
    Java
    유클리드호제법
    조합
    gcd
    백준
    LCM
    코딩테스트
    HashMap
    최대공약수
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
sunghyun.dev
[백준] 10870번 : 피보나치 수 5 (브론즈 Ⅱ) - Java/자바
상단으로

티스토리툴바