[알고리즘/백준] 2747번 : 피보나치 수(Java)

2025. 4. 24. 06:58·Algorithms & Education/알고리즘
문제 2747번 : 피보나치 수
문제링크 https://www.acmicpc.net/problem/2747
난이도 B2
언어 Java
분류 수학, 구현, 다이나믹 프로그래밍

 

 

📌 최종 정답 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 피보나치 수 입력
        int n = Integer.parseInt(br.readLine());

        bw.write(String.valueOf(fn(n)));

        bw.flush();
        bw.close();
    }

    public static int fn (int n) {
        // 0 or 1일 경우 바로 반환
        if ( n <= 1 ) {
            return n;
        }

        // 피보나치 초기값 설정
        int a = 0; // n-2
        int b = 1; // n-1

        int value = 0;

        // 2~n항 계산
        for (int i = 2; i <= n; i ++) {
            value = a + b;  // 현재 항 = 이전 두 항 합
            a = b;          // 다음 계산을 위해 값 이동
            b = value;      // // 다음 계산을 위해 값 이동
        }
        return value;
    }
}


📌 구해야 하는 정답

- n번째 피보나치 수


📌 풀이하기

1. 입력받기

int n = Integer.parseInt(br.readLine());

 

2. 계산

public static int fn (int n) {
    // 0 or 1일 경우 바로 반환
    if ( n <= 1 ) {
        return n;
    }

    // 피보나치 초기값 설정
    int a = 0; // n-2
    int b = 1; // n-1

    int value = 0;

    // 2~n항 계산
    for (int i = 2; i <= n; i ++) {
        value = a + b;  // 현재 항 = 이전 두 항 합
        a = b;          // 다음 계산을 위해 값 이동
        b = value;      // // 다음 계산을 위해 값 이동
    }
    return value;
}

 

3. 결과 출력하기

bw.write(String.valueOf(fn(n)));

 

📌 시간 복잡도

DP 배열을 탐색하는 시간복잡도를 구해봅시다.

점화식을 계산하는데에는 단순 상수연산이 소요됩니다 → O(1)

이를 총 N개에 대해 탐색하므로, 최종 시간복잡도는 O(N)이 됩니다.

 

N은 최대 45이므로 시간제한 1초안에 충분히 가능한 연산 개수 입니다.

 

📌 코드 설계

  1. 문제의 input을 받습니다.
  2. DP 배열을 초기화 하고 가장 작은 답을 구합니다.
  3. 세운 점화식에 맞게 dP 배열을 탐색합니다.
  4. 정답을 출력합니다.

'Algorithms & Education > 알고리즘' 카테고리의 다른 글

[알고리즘/백준] 1920번 : 수 찾기(Java)  (1) 2025.04.26
[알고리즘/백준] 1904번 : 01타일(Java)  (1) 2025.04.25
[알고리즘/백준] 10815번 : 숫자카드(Java)  (1) 2025.04.23
[알고리즘/백준] 7785번 : 회사에 있는 사람(Java)  (1) 2025.04.22
[알고리즘/백준] 28279번 : 덱2(Java)  (1) 2025.04.21
'Algorithms & Education/알고리즘' 카테고리의 다른 글
  • [알고리즘/백준] 1920번 : 수 찾기(Java)
  • [알고리즘/백준] 1904번 : 01타일(Java)
  • [알고리즘/백준] 10815번 : 숫자카드(Java)
  • [알고리즘/백준] 7785번 : 회사에 있는 사람(Java)
min_sol
min_sol
  • min_sol
    ෆ스누피가 찰리찰리해ෆ
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • Programming Languages (51)
        • JAVA (40)
        • C# (11)
      • Database (11)
        • oracle (7)
        • postgresql (3)
        • mysql (0)
      • Data & AI (5)
        • 빅데이터 (1)
        • AI (4)
      • Tools & Collaboration (30)
        • GitHub (10)
        • RPA (20)
      • GIS (1)
      • Web Development (58)
        • Spring (11)
        • JSP (11)
        • Front (1)
        • Vue (14)
        • PyQt (10)
        • Next.js (4)
      • Networking & Security (14)
        • TCP_IP (5)
        • 보안 (9)
      • Mobile (6)
        • 안드로이드스튜디오 (6)
      • Others (4)
        • 일상 (2)
        • 2021 (2)
      • Algorithms & Education (58)
        • 알고리즘 (52)
        • 세미나 | 교육 (5)
        • 자격증 (1)
  • 블로그 메뉴

    • 홈
    • 글쓰기
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    자동화
    VUE
    자바
    알고리즘
    RPA
    백준
    코딩테스트
    spring
    연습문제
    명품자바에센셜
    Java
    vue.js
    계산기
    PyQt5
    스윙
    생능출판
    jsp
    PyQt
    자료구조
    이클립스
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[알고리즘/백준] 2747번 : 피보나치 수(Java)
상단으로

티스토리툴바