728x90
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
문제
다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.
int fibonacci(int n) {
if (n == 0) {
printf("0");
return 0;
} else if (n == 1) {
printf("1");
return 1;
} else {
return fibonacci(n‐1) + fibonacci(n‐2);
}
}
fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.
- fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.
- fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.
- 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다.
- fibonacci(0)은 0을 출력하고, 0을 리턴한다.
- fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다.
- 첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다.
- fibonacci(3)은 fibonacci(2)와 fibonacci(1)의 결과를 얻고, 2를 리턴한다.
1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. N은 40보다 작거나 같은 자연수 또는 0이다.
출력
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
풀이
/*
* 입력
* 1. 테스트 케이스 T
* 2. N(0<=N<40)
* 출력
* 1. 0이 출력되는 횟수와 1이 출력되는 횟수
*
* >> 2차원 배열을 사용해서 0과 1을 저장
* >> 이미 계산한 배열은 그대로 리턴
*/
[java][boj][s3] 1904. 01타일
1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동
read-me.tistory.com
이전에 풀었던 피보나치 수열에서 1차원 배열을 2차원 배열로 바꾸기만 하면 된다
코드
package lv15_동적계획법1;
import java.util.*;
import java.io.*;
public class s3_1003_피보나치함수 {
static Integer[][] num = new Integer[40][2];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
num[0][0] = 1;
num[0][1] = 0;
num[1][0] = 0;
num[1][1] = 1;
for(int tc = 1; tc<=T; tc++) {
int N = Integer.parseInt(br.readLine());
fibonacci(N);
sb.append(num[N][0]).append(" ").append(num[N][1]).append("\n");
}
System.out.println(sb);
}
//int 말고 Integer를 쓰는 이유
// >> int는 자료형이라 null로 초기화 x
// >> Integer는 클래스라 null 처리
private static Integer[] fibonacci(int n) {
if(num[n][0] == null || num[n][1] == null) {
num[n][0] = fibonacci(n-1)[0] + fibonacci(n-2)[0];
num[n][1] = fibonacci(n-1)[1] + fibonacci(n-2)[1];
}
return num[n];
}
}
결과
#자바 #java #boj #백준 #알고리즘
728x90
'알고리즘 > BOJ' 카테고리의 다른 글
[java][boj][s2] 1912. 연속합 (0) | 2022.03.15 |
---|---|
[java][boj][s3] 9461. 파도반 수열 (0) | 2022.03.09 |
[java][boj][s2] 9184. 신나는 함수 실행 (0) | 2022.03.08 |
[java][boj][s3] 1904. 01타일 (0) | 2022.03.08 |
[java][boj][s1] 1629. 곱셈 (0) | 2022.03.05 |