honey_pot

[Python] 3 x n 타일링 본문

문제 풀이

[Python] 3 x n 타일링

_tera_ 2022. 7. 12. 17:03

https://school.programmers.co.kr/learn/courses/30/lessons/12902


수가 너무 커 오버플로우가 발생할 경우를 방지하기 위해 모듈러 연산을 이용해 저장되는 값을 작게 만들어 저장한다.

모듈러 연산 분배법칙

cf. 나머지 모듈러 연산은 페르마의 소정리를 이용해 B의 역원인 B^-1 을 구해 곱하는 형식으로 구한다.

(ex: 4/3mod11 = 4*4 mod 11 = 16 mod 11 = 5 mod 11)

1
2
3
4
5
6
7
8
9
10
11
def solution(n):
    # 1. dp 정의 
    # dp[i] = 4*dp[i-2] - dp[i-4]
    dp = [0 for _ in range(n+1)]
    # 2. 초기값 채우기
    dp[0= 1
    dp[2= 3
    # 3. dp 테이블 채우기 (모듈러 연산의 분배법칙 이용)
    for i in range(4,n+1,2):
        dp[i] = ((4 * dp[i-2]%1000000007- dp[i-4]%1000000007) % 1000000007
    return dp[n]
cs

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

[Python] 다음 큰 숫자  (0) 2022.07.12
[Python] 2 x n 타일링  (0) 2022.07.12
[Python] 구명보트  (0) 2022.07.12
[Python] 행렬 테두리 회전하기  (0) 2022.06.30
[Python] N개의 최소공배수  (0) 2022.06.27
Comments