Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- programers
- 아마존 웹 서비스
- 코테
- 코틀린
- java
- MVVM
- 안드로이드
- 머신러닝
- Python
- 프로그래머스
- 백준
- 플러터
- 다트
- aws
- 파이썬
- 알고리즘
- 개발
- VSCode
- softeer
- baekjoon
- GDSC
- 자바
- DART
- kotlin
- SWIFT
- Flutter
- 현대sw
- Android
- 스위프트
- 소프티어
Archives
- Today
- Total
조준장 개발자 생존기
[baekjoon] 백준 11726번(파이썬): 2×n 타일링 본문
문제
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
알고리즘
- 점화식을 구해보면 n = 1일 때, 1이고 n = 2일 때, 2이고 n = 3일 때, 3이고 n = 4일 때, 5이고 n = 5일 때, 8인 것을 확인할 수 있다. (dp[n] = dp[n - 1] + dp[n - 2])
- n이 3보다 작거나 같을 때 직사격형을 채우는 방법의 수가 n개 이므로 n을 출력한다.
- 그 외인 경우에는 점화식을 통해서 문제를 수행한다.
코드
import sys
sys.setrecursionlimit(10 ** 6)
# 점화식 : n = 1 일때 1, n = 2 일때 2, n = 3 일때 3, n = 4 일때 5, n = 5 일때, 8
n = int(sys.stdin.readline())
dp = [0] * (n + 1)
# n이 3보다 같거나 작을 때는 직사각형을 채우는 방법의 수가 n개이다.
if n <= 3:
print(n)
# n보다 크다면 점화식을 통해 문제를 수행
else:
dp[1] = 1 # n = 1 일때 1
dp[2] = 2 # n = 2 일때 2
# 반복문을 통해 점화식을 코드로 수행
for i in range(3, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
# n일때 경우의 수에서 10007로 나눈 값을 출력
print(dp[n] % 10007)
실패한 코드(시간 초과)
import sys
sys.setrecursionlimit(10 ** 6)
# 점화식 : n = 1 일때 1, n = 2 일때 2, n = 3 일때 3, n = 4 일때 5, n = 5 일때, 8
n = int(sys.stdin.readline())
def dp(v):
if v == 1:
return 1
elif v == 2:
return 2
else:
return dp(v - 1) + dp(v - 2)
print(dp(n))
n의 범위가 1보다 크거나 같고 1000보다 작거나 같기 때문에 위 코드를 통해 수행하게 되면 2^n의 시간 복잡도가 생기는 것으로 보인다.
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 2579번(파이썬): 계단 오르기 (0) | 2021.11.21 |
---|---|
[baekjoon] 백준 2748번(파이썬): 피보나치 수 2 (0) | 2021.11.21 |
[baekjoon] 백준 10870번(파이썬): 피보나치 수 5 (0) | 2021.11.18 |
[baekjoon] 백준 9095번(파이썬): 1, 2, 3 더하기 (0) | 2021.11.17 |
[baekjoon] 백준 1463번(파이썬): 1로 만들기 (0) | 2021.11.16 |