본문 바로가기
acmicpc/Java

[Java] 백준 1003 피보나치 함수

by 952_hi 2022. 4. 11.

https://www.acmicpc.net/problem/1003

문제바로가기

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 


1. 접근방법

 

1. 재귀함수로 0 1일때 리턴해주고 숫자세서 출력해줘야겠다.

2. 시간초과-> 0.25초라 재귀적으로는 풀지못하고 dp로 풀어야겠다고 생각함.

3. 0,1일때 각각 출력해줘야하므로 dp테이블 2개를 따로 선언해 각각 더해주고 출력해주기로 생각함.

 

2. 실수 및 느낀점

 

1. 문제를 꼼꼼히 읽지않고 바로 내 방식으로 품 만약 테케를 제공해주지 않거나 채점결과를 알려주지 않는 테스트라면 분명 좋지 않을 것이라고 생각함.

2. dp로 풀어도 좀더 효율적으로 짤 수 있지않을까 생각이 듬

 

3. 코드

 

import java.io.*;
public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int tc = Integer.parseInt(br.readLine());
		int[] zero = new int[41];
		int[] one = new int[41];
		zero[0] = 1;
		one[0] = 0;
		zero[1] = 0;
		one[1] = 1;
		for(int i=2;i<=40;i++) {
			zero[i] = zero[i-1]+zero[i-2];
			one[i] = one[i-1]+one[i-2];
		}
		for(int t=0;t<tc;t++) {
			int a=Integer.parseInt(br.readLine());
			sb.append(zero[a]).append(" ").append(one[a]).append("\n");
		}
		sb.setLength(sb.length()-1);
		bw.write(sb.toString());
		bw.flush();
	}
}

댓글