https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
전형적인 DP 문제라고 생각한다. 보통 피보나치 문제라고 하면 실행결과값 하나만 가지고 재귀, 반복문, DP를 이용해서 해결하곤 하는데 이 문제는 f(0)과 f(1)이 몇 번 호출되는 지에 대한 문제로써 2가지 값을 계속 기억해줘야 하기 때문에 ArrayList의 값으로 int형 배열을 이용해서 해결했다.
문제
입출력 및 예제
코드
import java.util.ArrayList;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
// f(0), f(1) 등 dp에 이용할 기초값 설정
ArrayList<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1,0});
list.add(new int[]{0,1});
// n의 최대 값인 40까지 dp 실행
for(int i=2; i<=40; i++)
{
int zero = list.get(i-1)[0] + list.get(i-2)[0];
int one = list.get(i-1)[1] + list.get(i-2)[1];
list.add(new int[]{zero, one});
}
// 테스트케이스 갯수만큼 입력받는 인덱스에 대한 0, 1의 개수 출력
int t = sc.nextInt();
for(int i=0; i<t; i++)
{
int index = sc.nextInt();
sb.append(list.get(index)[0] + " " + list.get(index)[1] + "\n");
}
System.out.print(sb.toString());
sc.close();
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[백준] 6359 만취한 상범 (0) | 2021.10.29 |
---|---|
[백준] 2446 별 찍기-9 (0) | 2021.10.29 |
[백준] 2669 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.10.29 |
[백준] 2455 지능형 기차 (0) | 2021.10.28 |
[백준] 1259 펠린드롬수 (0) | 2021.10.26 |
댓글