DP(dynamic programming)을 이용해서 풀 수 있는 문제였다.
예를 들어 피보나치 함수는 f(i) = f(i-1) + f(i-2) 라는 점화식이 적용되는데, 이는 피보나치 수의 값 뿐만 아니라 문제에서 나오는 0과 1의 출력 횟수에도 동일하게 적용된다.
import sys
input = sys.stdin.readline
dp = [[0, 0] for _ in range(41)]
dp[0][0], dp[0][1] = 1, 0
dp[1][0], dp[1][1] = 0, 1
for i in range(2, 41):
dp[i][0] = dp[i-1][0] + dp[i-2][0]
dp[i][1] = dp[i-1][1] + dp[i-2][1]
T = int(input())
for _ in range(T):
N = int(input())
print(str(dp[N][0]) + " " + str(dp[N][1]))
'알고리즘' 카테고리의 다른 글
[백준][Python 파이썬] 11723번 집합 (0) | 2023.11.24 |
---|---|
[백준] 1012번 유기농 배추 (Python 파이썬) (2) | 2023.11.24 |
[백준] 5430번 AC (Python 파이썬) (0) | 2023.11.24 |
ch14-6(leetcode 297). 이진 트리 직렬화 & 역직렬화 (0) | 2023.02.26 |
ch14-5(leetcode 617). 두 이진 트리 병합 (0) | 2023.02.22 |