
피보나치 함수를 그대로 C#으로 바꿔서 풀었더니 바로 시간초과가 나왔다
역시.. 재귀함수로 이렇게 쉽게 갈리가 없지
0과 1이 출력되는 횟수만 구하면 되므로
횟수를 각 숫자마다 저장할 배열을 만들고
0을 가지고 있을 갯수 : i = (i-1) + (i-2)
1을 가지고 있을 갯수 : i = (i-1) + (i-2)
를 각각 출력하면 된다.
class Fibonacci {
static void Main(String[] args)
{
int testcase = int.Parse(Console.ReadLine());
while (testcase > 0)
{
int[,] fiboArray = new int[40+1, 1+1]; // 최대 정수가 40이므로 +1
fiboArray[0, 0] = 1; // ,0 의 갯수
fiboArray[1, 1] = 1; // ,1 의 갯수
int testitem = int.Parse(Console.ReadLine());
for (int i = 2; i <= testitem; i++) {
fiboArray[i, 0] = fiboArray[i - 1, 0] + fiboArray[i - 2, 0];
fiboArray[i, 1] = fiboArray[i - 1, 1] + fiboArray[i - 2, 1];
}
Console.WriteLine("{0} {1}", fiboArray[testitem,0] , fiboArray[testitem,1]);
testcase -= 1;
}
}
}
재귀로 날먹 하려다 시간초과 한대 맞고 해결
