티스토리 뷰

728x90

문제 링크

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

기본적인 피보나치 문제를 모르거나 시간초과가 문제라면

http://degurii.tistory.com/14?category=755814

를 참고하자.



기존의 피보나치 함수가

f(n)=f(n2)+f(n1)

이므로


n일때 호출되는 0과 1의 개수를 [0의개수, 1의개수]n 로 표현해서 단순히

[i,j]n=[i,j]n2+[i,j]n1 처럼 쓸 수 있다.


이때, [i,j]+[x,y]=[i+x,j+y]로 정의한다.



정답 코드

#include <iostream>
using namespace std;
using pii = pair<int, int>;
int n, t;
pii d[50];
pii operator + (const pii &a, const pii &b) {
return { a.first + b.first, a.second + b.second };
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
d[0] = { 1, 0 };
d[1] = { 0, 1 };
for (int i = 2; i <= 40; i++) {
d[i] = d[i - 1] + d[i - 2];
}
cin >> t;
while (t--) {
cin >> n;
cout << d[n].first << ' ' << d[n].second << '\n';
}
}
view raw 1003.cpp hosted with ❤ by GitHub


728x90

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[BOJ] 백준 1005 ACM Craft  (0) 2018.06.28
[BOJ] 백준 1004 어린 왕자  (0) 2018.06.28
[BOJ] 백준 2747 피보나치 수  (0) 2018.06.28
[BOJ] 백준 1002 터렛  (0) 2018.06.27
[BOJ] 백준 1001 A - B  (0) 2018.06.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함