피보나치 함수를 그대로 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; } } }
재귀로 날먹 하려다 시간초과 한대 맞고 해결