https://www.acmicpc.net/problem/15624
풀이
피보나치 수 문제인데 범위가 커져서 1,000,000,007로 나누는 문제이다.
나머지 분배법칙에 대해 자세히 알고있지 못하여 살짝 해맸는데 나머지 분배법칙만 잘 알고 있으면 dp를 사용하여 쉽게 풀수 있는 문제이다.
나머지 분배법칙의 증명은 다음 블로그를 참고하였다.
https://sexycoder.tistory.com/66
이 문제를 푸는것과는 관계가 없지만 공부를겸해서 나눗셈에 대한 나머지 분배 법칙 증명은 다음 블로그를 통해 알 수 있었다.
https://goodteacher.tistory.com/398
위에서 B^(p-2)는 잉여역수인데 이에대한 내용은 여기에 있다.
코드
#include<iostream>
using namespace std;
long long dp[1000000];
int main() {
int n;
cin >> n;
dp[0] = 0;
dp[1] = 1;
dp[2] =1;
for (int i = 3; i <= n; i++) {
dp[i] =( (dp[i-1] % 1000000007) +(dp[i-2] % 1000000007)) % 1000000007;
}
cout << dp[n];
}
'Koala - 5기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 알고리즘 5582번 공통 부분 문자열 (0) | 2022.01.23 |
---|---|
[BOJ/c++] 2110 - 공유기 설치 (0) | 2022.01.22 |
[BOJ / python] 14430번: 자원 캐기 (0) | 2022.01.22 |
[BOJ / Swift & Python] 17626 - Four Squares (2) | 2022.01.21 |
[백준/JAVA] - 2110번 공유기 설치 (0) | 2022.01.21 |