목차

타일 채우기

ps
링크acmicpc.net/…
출처BOJ
문제 번호2133
문제명타일 채우기
레벨실버 2
분류

동적계획법

시간복잡도O(logn)
인풋사이즈n<=30
사용한 언어Python
제출기록33952KB / 140ms
최고기록64ms
해결날짜2020/11/12

풀이

코드

코드 1

"""Solution code for "BOJ 2133. 타일 채우기".

- Problem link: https://www.acmicpc.net/problem/2133
- Solution link: http://www.teferi.net/ps/problems/boj/2133
"""

from teflib import combinatorics


def main():
    n = int(input())
    print(0 if n % 2
          else combinatorics.linear_homogeneous_recurrence([4, -1], [1, 3],
                                                           n // 2))


if __name__ == '__main__':
    main()

코드 2 - 행렬곱 기법을 쓰지 않고 O(n)으로 푸는 방식

def main():
    n = int(input())
    if n % 2:
        print(0)
    else:
        cur, prev = 3, 1
        for i in range(2, n, 2):
            cur, prev = cur * 4 - prev, cur
        print(cur)


if __name__ == '__main__':
    main()