풀이
주어지는 나머지 M이 모든 case가 일치한다는 보장이 없다.
매번 새로운 피보나치 수열의 수들에 대해 M으로 나눈 나머지로 이루어진 수열을 구해야한다.
다행히도 문제에서 요구하는 수열에는 Pisano Period라는 규칙성이 존재한다.
즉, 모든 피보나치 수열의 수들에 대해 계산할 필요가 없다.
결국 주기에 따라 수열들의 수는 반복을 하기 때문이다.
우선, 아래의 예제 Pisano Period table을 살펴보자.
피보나치 수열들을 K번째 피보나치수로 나누었을 때 나머지들의 수열이다.
즉, Pisano period의 주기는 나머지가 {0, 1}이 나올때를 기준으로 이루어진다는 것을 알 수 있다.
0만 나오는 경우에는 성립하지 않는다.
나머지가 {0, 1}이 나올때까지 반복해주자.
어차피 입력되는 case마다 M값이 다르고 backtracking없이 매번 table을 다시 구해야해 toggling을 적용했다.
소스코드
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 18110] solved.ac [Python] (1) | 2023.06.06 |
---|---|
[백준 26530] Shipping [Python] (0) | 2023.06.04 |
[백준 26531] Simple Sum [Python] (0) | 2023.06.02 |
[백준 26532] Acres [Python] (0) | 2023.06.02 |
[백준 26546] Reverse [Python] (0) | 2023.05.31 |