[백준 Fibonacci] 2747번 문제

Kwon·2024년 1월 8일

백준

목록 보기
22/22
post-thumbnail

백준 2747번 문제

풀이

  • 피보나치 수열 N번 째 구하는 문제
  • 동적 계획법 중 대표적인 문제로 N[i - 2] + N[i - 1] 을 사용하면 손 쉽게 풀 수 있는 문제
  • 내가 해결한 문제는 바텀-업에 가까움
import java.io.*;

public class 피보나치 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

        long[] array = new long[n + 1];
        array[0] = 0; array[1] = 1;
        long result = array[0];
        if (n == 1) result = array[1];
        else if (n >= 2) {
            for (int i = 2; i <= n; i++) {
                array[i] = array[i - 1] + array[i - 2];
            }
            result = array[n];
        }
        bw.write(result + "");
        bw.flush();
        bw.close();
        bf.close();
    }
}

1. n-2 & n-1 번 째 초기화

int n = Integer.parseInt(bf.readLine());
long[] array = new long[n + 1];
array[0] = 0; array[1] = 1;
long result = array[0];
if (n == 1) result = array[1];
else if (n >= 2) {
    // 수열 구하기
}
  • 수월한 계산을 위해 0(수열 n-2)번 째와 1(수열 n-1)번 째 초기화
  • 해당 문제에선 n을 90까지 입력 받으니 int 타입이 아닌 long 타입으로 변수 선언
  • n이 1 혹은 0 일 시, 해당 숫자로 변환, 그게 아니면 수열 구하기

2. 바텀-업 피보나치

for (int i = 2; i <= n; i++) {
    array[i] = array[i - 1] + array[i - 2];
}
result = array[n];
  • 두 번째 부터 수열이 이어지므로 i를 2로 설정한 후 피보나치 수열 진행
  • n번 째 숫자 도출만 원하니 결과 값은 반복문 끝난 후 결과 값 반환
  • 톱-다운 방식은 주로 재귀함수를 이용하고 바텀-업은 주로 반복문 이용

profile
📲 @bu_kwon_2 / 💻 dnu05043.log / ⌨ Back-end / 🦁 LikeLion

0개의 댓글