[백준] 1904번 : 01타일

2021. 4. 20. 15:48백준

요새 DP를 공부하고 있는데 하는 겸사겸사 비슷한 문제들 위주로 풀어보고 있다.

문제를 보기 전까진 몰랐는데 보고 나니 이것도 피보나치의 연장선이라 좀 쉽게 해결한 것 같다.

 

 

접근법

- N이 5일 때까지를 각각 계산한 결과 1, 2, 3, 5, 8로 피보나치 형상인 것을 알 수 있었다.

- 왜 피보나치일까 고민을 해본 결과, 끝이 00인 경우 (N - 2)의 수와 끝이 1인 경우 (N - 1)를 더해주면 N일 때의 경우의 수가 나온다는 것을 알 수 있었다.

- 중간에 for문 안에서 %를 취해준 이유는 마지막에 %를 취해주게 되면 중간에 int값이 터질 수도 있어서 안에서 처리를 해줬다.

- 재귀로 돌리면 무조건 터지는 수이기 때문에 for문을 활용하여 넣어주었다.

 

 

 

풀이

#백준 1904번, 01타일
import sys

dp = [0 for _ in range(1000001)]
dp[1] = 1
dp[2] = 2

N = int(input())


for i in range(3, N + 1) :
    dp[i] = (dp[i - 1] + dp[i - 2]) % 15746

print(dp[N])

 

 

 

결과

'백준' 카테고리의 다른 글

[백준] 9461번 : 파도반 수열  (0) 2021.04.21
[백준] 2579번 : 계단 오르기  (0) 2021.04.20
[백준] 1003번 : 피보나치 함수  (0) 2021.04.19
[백준] 10819번 : 차이를 최대로  (0) 2021.04.09
[백준] 10829번 : 스택  (0) 2021.03.24