728x90
반응형
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
문제해결
- 세로 길이는 2로 고정이라는 것에 주목하자.
그러면 가로길이가 1인 1번으로 한개 놓던가 가로길이가 2인 2번으로 2개 놓는 방법이 있다. 이를 보면 피보나치 수열
fib(n) = fib(n-1) + fib(n-2) 가 생각이 난다.
CODE
import sys
input = sys.stdin.readline
def fib(n):
if n==1:
return 1
elif n==2:
return 2
return fib(n-1) + fib(n-2)
if __name__=="__main__":
n = int(input())
ans =fib(n)%10007
print(ans)
결과는 시간초과!
= 재귀를 사용하기는 시간복잡도가 너무 크다는 뜻이다.
그러면 생각나는 것이 리스트에 숫자를 append해서 for문으로 O(N) 시간복잡도로 끝내는 방법이 있다.
CODE
import sys
input = sys.stdin.readline
n = int(input())
F = [0,1,2]
for i in range(3,1001):
F.append(F[i-1] + F[i-2])
print(F[n]%10007)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[Python] 백준 2193 이친수 (0) | 2022.12.22 |
---|---|
[Python] 백준 25682 체스판 다시 칠하기 2 (0) | 2022.12.22 |
[Python] 백준 11576 Base Conversion (0) | 2022.12.22 |
[Python] 백준 2745 진법 변환 (0) | 2022.12.21 |
[Python] 백준 4195 친구 네트워크 (0) | 2022.12.21 |
댓글