본문 바로가기
C#/백준 알고리즘

2022.02.06 [백준] C# 피보나치 함수

by ian's coding 2022. 2. 6.
728x90
반응형

 

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

 

1003번: 피보나치 함수

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

www.acmicpc.net


풀이

처음 재귀함수를 이용해서 문제를 해결하려 했지만 시간초과가 발생했다. 그래서 구글링 중, 재귀함수가 아닌 배열을 이용해서 문제를 해결할 수 있다고 알게 되었다.

문제에서 n의 범위가 40이하의 자연수여서 이차원 배열의 범위를 int[41,2]로 설정했고, for문을 이용하여 모든 범위의 수에서 0, 1이 몇 개씩 들어가는지 배열에 넣었다. 그리고 테스트 케이스에 맞게 바로 출력했다.

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
31
32
using System;
using System.Text;
using System.IO;
 
class Program
{
    
    
    static void Main()
    {
        StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
        StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
        StringBuilder sb = new StringBuilder();
        int n = int.Parse(sr.ReadLine());
        int[,] fibo = new int[412];
        fibo[00= 1;
        fibo[11= 1;
        for (int i = 2; i < 41; i++)
        {
            fibo[i, 0= fibo[i - 10+ fibo[i - 20];
            fibo[i, 1= fibo[i - 11+ fibo[i - 21];
        }
        for(int i = 0; i < n; i++)
        {
            int a = int.Parse(sr.ReadLine());
            sb.Append($"{fibo[a, 0]} {fibo[a, 1]}" + "\n");
        }
        sw.WriteLine(sb.ToString());
        sr.Close();
        sw.Close();
    } 
}
cs

 

 

 

 

728x90
반응형

댓글