BOJ]1003. 피보나치 함수
https://www.acmicpc.net/problem/1003
DP의 맛보기 문제정도이다.
단순히 피보나치의 결과를 구하는 문제가 아니다.
피보나치 함수가 호출되었을 때, 0과 1이 얼마나 반환(출력)되는지 구하는 문제이다.
규칙을 살펴보자.
예를 들어,
fibo(n) : (0의 반환횟수, 1의 반환횟수) 라고 하자.
fibo(0) : (1,0)
fibo(1) : (0,1)
fibo(2) : (1,1) -> fibo(0) + fibo(1) -> (1,0) + (0,1)
fibo(3) : (1,2) -> fibo(1) + fibo(2) -> (0,1) + (1,1)
fibo(4) : (2,3) -> fibo(2) + fibo(3) -> (1,1) + (1,2)
피보나치의 규칙을 활용하되, 실제 피보나치 값이 아닌 0과 1의 반환 결과를 가지고 계산을 하는 것이다.
문제에서 주어지는 N의 범위는 0이상 40이하이므로, 배열을 41까지 선언해주고 그 값까지의 모든 경우를 구해놓았다.
그리고 나서 결과만 출력해주도록 했다.
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 | public class bj_1003_피보나치함수 { static int[][] memo; public static void main(String[] args) { Scanner sc = new Scanner(System.in); memo = new int[41][2]; memo[0][0] = 1; memo[0][1] = 0; memo[1][0] = 0; memo[1][1] = 1; for(int i=2; i<41; i++) { for(int j=0; j<2; j++) { memo[i][j] = memo[i-2][j]+memo[i-1][j]; } } int T = sc.nextInt(); for(int tc=1; tc<=T; tc++) { int n = sc.nextInt(); System.out.println(memo[n][0] +" " + memo[n][1]); }//end test cases }//end main } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
BOJ] 14502. 연구소 (0) | 2020.01.28 |
---|---|
BOJ] 2805. 나무 자르기 (0) | 2019.10.05 |
BOJ] 4179. 불! (0) | 2019.10.05 |
BOJ] 16283. Farm (0) | 2019.10.01 |
BOJ] 2579. 계단오르기 (0) | 2019.09.25 |