J 크 2023. 7. 31. 16:34
728x90
반응형

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

 

2747번: 피보나치 수

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

www.acmicpc.net

 간만에 과음했더니 너무 피곤합니다..ㅠㅠ


※  문제를 요약하면 아래와 같습니다.

▶ 피보나치 수열에 관한 문제입니다.

▶ 피보나치 수열이란 Fn = Fn-1 + Fn-2 (n ≥ 2) 의 조건을 만족하는 수열을 말합니다.

   (Ex. 0, 1, 1(0+1), 2(1+1), 3(2+1), 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597....

▶ 입력은 숫자 N이 주어지고, 출려그올 N번째 피보나치 수를 출력합니다.

▶ 출력은 입력된 단어 중 그룹 단어의 갯수를 출력합니다.

◈ Input

10

◈ Output

55

 ◎  코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

 피보나치 수열을 배열로 저장할 때, 0번, 1번 배열의 값은 각각 0, 1입니다. ( ArrayList )

▶ 2번 배열의 값부터 해당 인덱스-1, 인덱스-2번의 값을 더하여 저장합니다. 

▶ 입력된 숫자만큼 피보나치 수열을 탐색하여 출력합니다.

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

public class Main {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(bReader.readLine());
		
		ArrayList<Integer> arrFibonacci = new ArrayList<>();
		
		arrFibonacci.add(0);
		arrFibonacci.add(1);
		
		int nTemp = 0;
		for(int i = 2; i <= N; i++) {
			nTemp = arrFibonacci.get(i-1) + arrFibonacci.get(i-2);
			arrFibonacci.add(nTemp);
		}

		System.out.println(arrFibonacci.get(arrFibonacci.size()-1));
	}
}

 번외 코드로,  재귀함수를 사용하니 이상하게 시간 초과가 계속 발생해서 코드를 다시 작성해서 풀었었습니다. 문제에서 입력값에 제한이 없어서 너무 크게 재귀가 도는건지,,,

 아래의 코드가 재귀함수를 사용한 코드인데 혹시 원인을 아시는 분께서는 코멘트를 조금 부탁드리겠습니다 :) 

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

public class Main {
	
	public static int Fibonacci(int nNum) {
		if(nNum <= 0)
			return 0;
		else if(nNum == 1)
			return 1;
		
		return Fibonacci(nNum - 1) + Fibonacci(nNum - 2);
		
	}
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(bReader.readLine());
		
		System.out.println(Fibonacci(N));
	}
}

 

긴 글 읽어주셔서 감사합니다!

Good Luck! (피드백 고맙습니다)