< 문제 >
다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다.
1 2 3 4 5 6 7 8 9 10 11 | int fibonacci( int n) { if (n == 0) { printf ( "0" ); return 0; } else if (n == 1) { printf ( "1" ); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } |
fibonacci(3)
을 호출하면 다음과 같은 일이 일어난다.
fibonacci(3)
은fibonacci(2)
와fibonacci(1)
(첫 번째 호출)을 호출한다.fibonacci(2)
는fibonacci(1)
(두 번째 호출)과fibonacci(0)
을 호출한다.- 두 번째 호출한
fibonacci(1)
은 1을 출력하고 1을 리턴한다. fibonacci(0)
은 0을 출력하고, 0을 리턴한다.fibonacci(2)
는fibonacci(1)
과fibonacci(0)
의 결과를 얻고, 1을 리턴한다.- 첫 번째 호출한
fibonacci(1)
은 1을 출력하고, 1을 리턴한다. fibonacci(3)
은fibonacci(2)
와fibonacci(1)
의 결과를 얻고, 2를 리턴한다.
1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)
을 호출했을 때, 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 33 34 35 36 37 38 39 40 41 42 43 | #include <iostream> #include <vector> using namespace std; vector<vector<int>> oz; vector<vector<int>> fibonacci(int n, vector<vector<int>>&oz) { if (oz[n][0] != 0 || oz[n][1] != 0) { return oz; } if (n == 0) { oz[n][n]++; return oz; } if (n == 1) { oz[n][n]++; return oz; } else { fibonacci(n - 1, oz); fibonacci(n - 2, oz); oz[n][0] += oz[n - 1][0]; oz[n][1] += oz[n - 1][1]; oz[n][0] += oz[n - 2][0]; oz[n][1] += oz[n - 2][1]; return oz; } } int main() { int T; cin >> T; for (int i = 0; i < T; i++) { int n; cin >> n; oz.assign(n + 1, vector<int>(2, 0)); fibonacci(n, oz); cout << oz[n][0] << " " << oz[n][1] << endl; } return 0; } | cs |
2019/02/07 - [Study/Algorithm] - 백준 #9461 - 파도반수열 python
'Programming > Algorithm' 카테고리의 다른 글
백준 #4344 - 평균은 넘겠지 python (0) | 2019.02.12 |
---|---|
백준 #1152 - 단어의 개수 python (0) | 2019.02.12 |
백준 #2775 - 부녀회장이 될테야 python (0) | 2019.02.08 |
백준 #2292 - 벌집 python (0) | 2019.02.08 |
백준 #9461 - 파도반수열 python (0) | 2019.02.07 |