728x90
https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
* 문제
fibonacci(3)을 호출하면 1은 2번 출력되고, 0은 1번 출력된다.
N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는가
* 풀이 방법
- fibonacci(0) 부터 차례로 0과 1이 각각 몇 번 출력되는지 카운트 해봄
- 그 결과, 0과 1의 각각의 개수가 피보나치 수열 규칙대로 늘어나는 것을 발견함
N | 0 출력 횟수 ( f(0) 호출 횟수 ) |
1 출력 횟수 ( f(1) 호출 횟수 ) |
0 | 1 | 0 |
1 | 0 | 1 |
2 | 1 | 1 |
3 | 1 | 2 |
4 | 2 | 3 |
5 | 3 | 5 |
6 | 5 | 8 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(), n, a, b, c;
while( t-- > 0 ) {
n = sc.nextInt();
if( n == 0 )
a = 1; b = 0;
else {
a = 0; b = 1;
for( int i = 2; i <= n; i++ ) {
c = a + b;
a = b;
b = c;
}
}
System.out.println( a + " " + b );
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(), n, i;
int dp[] = new int[41];
dp[0] = 0;
dp[1] = 1;
for( i = 2; i <= 40; i++ )
dp[i] = dp[i-1] + dp[i-2];
while( t-- > 0 ) {
n = sc.nextInt();
if( n == 0 )
sb.append( 1 + " " + 0 + "\n" );
else
sb.append( dp[n-1] + " " + dp[n] + "\n" );
}
sc.close();
System.out.println( sb.toString() );
}
}
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 백준 온라인 저지 ( BOJ )' 카테고리의 다른 글
[백준(Baekjoon)][자바(java)] 9461 : 파도반 수열 / 동적 계획법 1 (0) | 2020.06.19 |
---|---|
[백준(Baekjoon)][자바(java)] 1904 : 01타일 / 동적 계획법 1 (0) | 2020.06.19 |
[백준(Baekjoon)][자바(java)] 2748 : 피보나치 수 2 / 동적 계획법 1 (0) | 2020.06.19 |
[백준(Baekjoon)][자바(java)] 1541 : 잃어버린 괄호 / 그리디 알고리즘 (0) | 2020.05.11 |
[백준(Baekjoon)][자바(java)] 11399 : ATM / 그리디 알고리즘 (0) | 2020.05.11 |