본문 바로가기
Problem Solving/BOJ

[BOJ][Python]1904 풀이

by NoiB 2023. 7. 11.
반응형

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

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이

www.acmicpc.net

n = int(input())
if n == 1 or n == 2 or n == 3:
    print(n)
else:
    dp = [0 for _ in range(n+1)]
    dp[1], dp[2] = 1, 2
    for i in range(3, n+1):
        dp[i] = (dp[i-1] + dp[i-2])%15746
    print(dp[n])

뻔한 dp 문제입니다. n 범위 때문에 index 에러가 나니까 예외처리를 하거나 n이 1,000,000일 때 까지 미리 구해도 됩니다. 다만 메모리 에러 때문에 미리 15746의 나머지를 구해서 저장을 해야 하는데 그러면 중간에 15746이 넘는 값들은 제대로 된 값이 저장이 되는게 아닌데 이래도 되나 싶겠지만 상관없습니다.

 

나머지 연산은 피보나치 수열에 수학적인 영향을 미치지 않습니다. 

(a + b) % p = ((a % p) + (b % p)) % p (덧셈의 나머지 연산 규칙)

대충 3, 5, 4를 사용해봅시다. (3 + 5) % 4 = 0, ((3 % 4) + (5 % 4)) % 4 = 0 으로 같은 걸 확인할 수 있습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]1515 풀이  (0) 2023.07.14
[BOJ][Python]13305 풀이  (0) 2023.07.13
[BOJ][Python]1347 풀이  (0) 2023.07.09
[BOJ][Python]1291 풀이  (0) 2023.07.08