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
- 백준3085
- 브루트포스
- 18108
- 디버그심볼
- 기본메신저
- 25083
- 1330
- 꼬마 정민
- 백준
- 10926
- 개수 세기
- kotlin
- Android
- 백준1107
- Counting The number
- PreferenceManager
- 10807
- 사파리 월드
- 2525
- Class Delegation
- baekjoon
- 파이썬
- 코틀린
- dp
- 10430
- debugSymbolLevel
- 새싹
- BitMasking
- 백준1476
- safari world
Archives
- Today
- Total
세상을 더 좋게
[백준] 2133 '타일 채우기' 파이썬(python) 본문
https://www.acmicpc.net/problem/2133
2133번: 타일 채우기
3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.
www.acmicpc.net
n = int(input())
def sol(n):
if n % 2 != 0:
return 0
else:
dp = [0] * (n + 1)
dp[0] = 1
dp[2] = 3
for i in range(4, n + 1):
dp[i] = dp[i-2] * 3
for j in range(i-4, -1, -2):
dp[i] += dp[j] * 2
return dp[n]
print(sol(n))
Point
- 타일문제로서 규칙을 먼저 찾아보면 홀수는 성립되지 않고 짝수만 성립된다는 것을 우선 알 수 있다.
- 그리고 n=2일 때는 3이지만, 그 이후 짝수인 4, 6, 8 ...에서는 이전 규칙과 상이한 패턴이 단지 2가지만 추가된다는 것을 알 수 있다.(밑의 그림처럼 중간에 두개가 들어간 형식이다. 이것을 반대로 한 것까지 해서 총 2가지의 새로운 패턴이 추가된다. 6, 8, 10 ... 짝수에서는 계속해서 이런 모양이 나온다)
- 따라서 dp[n] = dp[n-2] * 3 + dp[n-4] *2 + ... dp[0] * 2 라는 식을 세울 수 있다.
- 이전의 결과값을 사용하는 것이기에 dp테이블을 이용한 DP문제라고 할 수 있고, 해당 규칙을 코드로 나타내면 위와 같다.
'Algorithm > DP' 카테고리의 다른 글
[백준] 11054 '가장 긴 바이토닉 부분 수열' 파이썬(python) (0) | 2022.01.11 |
---|---|
[백준] 13398 '연속합 2' 파이썬(python) (0) | 2022.01.11 |
[백준] 11722 '가장 긴 감소하는 부분 수열' 파이썬(python) (0) | 2022.01.08 |
[백준] 11055 '가장 큰 증가 부분 수열' 파이썬(python) (0) | 2022.01.08 |
[백준] 2156 '포도주 시식' 파이썬(python) (0) | 2021.12.24 |