728x90
반응형
바닥 공사
난이도 : 中下 풀이 시간 : 20분
시간 제한 : 1초 메모리 제한 : 128 MB
해답
n = int(input())
d = [0] * 1001
d[0] = 0
d[1] = 1
d[2] = 3
for i in range(3, n+1):
d[i] = (d[i-1] + d[i-2]*2) % 796796
print(d[n])
예시
# 정수 N을 입력 받기
n = int(input())
# 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화
d = [0] * 1001
# 다이나믹 프로그래밍(Dynamic Programming) 진행 (보텀업)
d[1] = 1
d[2] = 3
for i in range(3, n + 1):
d[i] = (d[i - 1] + 2 * d[i - 2]) % 796796
# 계산된 결과 출력
print(d[n])
해설
왼쪽부터 차례대로 바닥을 덮개로 채운다고 생각하면 점화식을 세울 수 있습니다.
1. i-1까지 채워져 있으면 2*1 덮개를 채우는 하나의 경우의 수
2. i-2까지 채워져 있으면 1*2 덮개 2개를 넣는 경우, 2*2 덮개 1개를 넣는 경우 총 2가지의 경우의 수
그러므로 점화식을 세워보면 a[i] = a[i-1] + a[i-2] + a[i-2]입니다.
728x90
반응형
'알고리즘 (Python) > 이것이 코딩 테스트다 with 파이썬' 카테고리의 다른 글
[최단 경로 알고리즘] 가장 빠른 길 찾기 (0) | 2021.07.14 |
---|---|
[다이나믹 프로그래밍] 효율적인 화폐 구성 - 파이썬(python) (0) | 2021.07.13 |
[다이나믹 프로그래밍] 개미 전사 - 파이썬(python) (0) | 2021.07.13 |
[다이나믹 프로그래밍] 1로 만들기 - 파이썬(python) (0) | 2021.07.08 |
[다이나믹 프로그래밍] 다이나믹 프로그래밍 (0) | 2021.07.07 |