sm 기술 블로그

125. 24416(알고리즘 수업 - 피보나치 수 1) 본문

문제/백준_자바

125. 24416(알고리즘 수업 - 피보나치 수 1)

sm_hope 2022. 7. 2. 10:05
import java.util.*;
import java.io.*;

class Main {
	static int fibCnt;
	static int fib2Cnt;
	static int[] memo;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		fibCnt = 0;
		fib2Cnt = 0;
		memo = new int[100];

		fib(n);
		fib2(n);
		System.out.println(fibCnt + " " + fib2Cnt);

	}

	private static int fib(int n) {
		if (n == 1 || n == 2) {
			fibCnt++;
			return 1;
		} else {
			return fib(n - 1) + fib(n - 2);
		}

	}

	private static int fib2(int n) {
		if (memo[n] > 0) {
			fib2Cnt++;
			return memo[n];
		}

		if (n <= 1) {
			memo[n] = n;
			return memo[n];
		}

		else {
			memo[n] = fib2(n - 1) + fib2(n - 2);
			return memo[n];
		}

	}

}

문제요약

재귀함수와 동적프로그래밍을 이용하여 호출횟수를 출력하라.

설명

동적프로그래밍의 개념은 아래를 참고하자.

https://smhope.tistory.com/328?category=1056187 

 

동적프로그래밍(Dynamic Programming)

동적프로그래밍(Dynamic Programming) 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 것 다음과 같이 중복으로 계산하는 것을 줄여줌으로

smhope.tistory.com

 

주의점

Down - Top 방식을 사용하면 Top - Down 보다 cnt를 한번 더 증가 시킴.

import java.util.*;
import java.io.*;

class Main {
	static int fibCnt;
	static int fib2Cnt;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		fibCnt = 0;
		fib2Cnt = -1;

		fib(n);
		fib2(n);
		System.out.println(fibCnt + " " + fib2Cnt);

	}

	private static int fib(int n) {
		if (n == 1 || n == 2) {
			fibCnt++;
			return 1;
		} else {
			return fib(n - 1) + fib(n - 2);
		}

	}

	private static int fib2(int n) {
		if (n <= 1) {
			return n;
		}
		
		int first = 0;
		int second = 1;
		int tmp = 0;
		
		for(int i = 0 ; i < n-1; i++) {
			tmp = first + second;
			first = second;
			second = tmp;
			fib2Cnt+=1;
					
		}
		return tmp;
	}

}

'문제 > 백준_자바' 카테고리의 다른 글

127. 1904 (01타일)  (0) 2022.07.03
126. 9184 (신나는 함수 실행)  (0) 2022.07.02
124. 14889(스타트와 링크)  (0) 2022.07.01
123. 14888(연산자 끼워놓기)  (0) 2022.07.01
122. 2580(스도쿠)  (0) 2022.06.30
Comments