티스토리 뷰
일반적으로 다이나믹 프로그래밍을 이용하여 피보나치 함수를 구현하는 방법을 그대로 이용하면된다.
다른점은 0을 출력하는 것과 1을 출력하는 것을 따로 저장하여
다음 값의 호출에 0과 1을 출력하는 경우를 모두 더하여 출력하면 된다.
dp[N][0] : N번째 수의 0 출력 횟수
dp[N][1] : N번째 수의 1 출력 횟수
i번째 수의 0과 1출력 횟수는 다음과 같다.
dp[i][0] = dp[i-2][0] + dp[i-1][0];
dp[i][1] = dp[i-2][1] + dp[i-1][1];
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Scanner; | |
/** | |
* 백준, 1003, 피보나치 함수 | |
* | |
* @author whitebeard | |
* | |
*/ | |
public class Problem1003 { | |
public static void main(String[] args) { | |
Scanner sc = new Scanner(System.in); | |
int T = sc.nextInt(); | |
int[][] dp = new int[41][2]; | |
dp[0][0] = 1; | |
dp[1][1] = 1; | |
for (int i = 0; i < T; i++) { | |
fibonacciPrint(dp, sc.nextInt()); | |
} | |
sc.close(); | |
} | |
public static void fibonacciPrint(int[][] dp, int n) { | |
if (n >= 2 && dp[n][0] == 0 && dp[n][1] == 0) { | |
for (int i = 2; i <= n; i++) { | |
dp[i][0] = dp[i - 1][0] + dp[i - 2][0]; | |
dp[i][1] = dp[i - 1][1] + dp[i - 2][1]; | |
} | |
} | |
System.out.printf("%d %d\n", dp[n][0], dp[n][1]); | |
} | |
} |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준][위상정렬, DAG] 2252 줄세우기 (0) | 2017.06.20 |
---|---|
[백준][다이나믹] 1520 내리막길 (0) | 2017.06.20 |
[백준][다이나믹] 2156 포도주 시식 (0) | 2017.06.19 |
[백준] 1932 숫자삼각형 (0) | 2017.05.31 |
[백준][DP] 9251 LCS 알고리즘 (3) | 2017.04.20 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SPARK
- S3
- Linux
- mysql
- AWS
- 다이나믹
- build
- HIVE
- Tez
- yarn
- airflow
- Python
- ubuntu
- HDFS
- SQL
- hbase
- 알고리즘
- java
- 오류
- 하둡
- 파이썬
- 백준
- nodejs
- error
- 하이브
- 정올
- emr
- oozie
- Hadoop
- bash
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
글 보관함