gimmickbutreal

[백준/자바] 2748번 해설 - Java 본문

Algorithm/Java

[백준/자바] 2748번 해설 - Java

isshosng 2022. 9. 3. 17:52

https://www.acmicpc.net/problem/2748

 

2748번: 피보나치 수 2

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

 


문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

 

문제 해결방안

  • for 반복문을 통해 0부터 N까지 반복하며 이전 값의 연산을 통해 N번 째 피보나치 수를 찾아야 한다. n번째 칸은 자기 바로 앞과 앞의 앞의 값을 더한 값이다.

입력

첫째 줄에 n이 주어진다. n은 90보다 작거나 같은 자연수이다.

 

입력 해결방안

  • readLine method를 사용하여 문자열로 입력 받는다.
  • Integer.parseInt method를 사용하여 받은 문자열을 정수형으로 변환한다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

 

출력 해결방안

  • String.valueOf를 사용해 정수형을 다시 문자열로 반환하여 출력함

해설

내가 풀이한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io*;
public class Main{
 
public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    String str = br.readLine();
 
    int n = Integer.parseInt(str); 
    long[] dp;
 
    dp = new long[n+1]; // n+1만큼 dp 배열 선언
 
    dp[0= 0// 첫 번째 배열
    dp[1= 1// 두 번째 배열
    // Fn = Fn-1 + Fn-2 (n ≥ 2)
 
    for (int i=2; i<=n; i++){
        dp[i] = dp[i-1]+dp[i-2]; // 피보나치 수열 식을 배열로 정의했음
    }
 
    bw.write(String.valueOf(dp[n]));
 
 
    bw.flush();
    br.close();
}
}
 
cs