728x90
시간 제한 : 2초
메모리 제한 : 128MB
입력
첫째 줄에 n이 주어진다. n은 절대값이 1,000,000을 넘지 않는 정수이다.
출력
첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절대값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절대값을 1,000,000,000으로 나눈 나머지를 출력한다.
소스코드
#include <iostream> using namespace std; long long dp[1000001] = { 0, 1, }; int main(void) { int n, k; cin >> n; if (n < 0) k = -n; else k = n; for (int i = 2; i <= k; i++) dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000000; if (n > 0) cout << 1 << '\n' << dp[k] % 1000000000; else if (n == 0) cout << "0\n0"; else { if ((-n) % 2 == 0) cout << -1 << '\n' << dp[k] % 1000000000; else cout << 1 << '\n' << dp[k] % 1000000000; } cout << '\n'; }
Tip
너무나 흔한 피보나치 수열이다, 음수 개념으로 확장했다고 해서 달라지는 것은 없다. 절대값을 씌우면 양수일 때와 똑같다. 배열을 한 번에 100만개 생성할 때는 힙 메모리(전역변수)에 메모리를 할당해주어야 할 수도 있다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 5046 - 전국 대학생 프로그래밍 대회 동아리 연합(ACM-ICPC Regional) (0) | 2018.01.26 |
---|---|
백준] 11048 - 이동하기 (0) | 2018.01.25 |
백준] 2798 - 블랙잭(COCI 2011/2012) (0) | 2018.01.23 |
백준] 2851 - 슈퍼 마리오(COCI 2010/2011) (0) | 2018.01.22 |
백준] 5086 - 배수와 약수(ACM-ICPC Regional) (0) | 2018.01.20 |