[BOJ] #1904 - 01타일
2021. 6. 22. 17:23ㆍProblem Solving/Online Judge
1904번: 01타일
지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이
www.acmicpc.net
** 문제 유형
- 동적 프로그래밍
** 풀이
- 사용할 수 있는 타일의 종류는 2개: (1), (00)
- 두 가지 종류의 타일을 이용하여, N 길이의 수열을 만드는 모든 경우의 수를 계산
- 가장 전형적인 동적 프로그래밍 문제
- N이 최대 1,000,000 이므로 시간 복잡도 O(N)으로 해결해야 함
+) 과정
- N = 2일 때, 경우의 수는 2가지 -> (11), (00)
- N = 3일 때, 경우의 수는 3가지
- N = 4일 때, 경우의 수는 5가지
- 동적 프로그래밍 문제를 풀기 위해서는 점화식(인접한 항들 사이의 관계식)을 세워야 함
- D[i] = '수열의 길이가 i일 때의 경우의 수' 라고 하면,
- D[i] = D[i - 1] + D[i - 2]
- cf) 피보나치 수열
n = int(input())
dp = [0] * 1000001 # 메모이제이션
dp[1] = 1
dp[2] = 2
for i in range(3, n + 1):
dp[i] = (dp[i - 2] + dp[i - 1]) % 15746
print(dp[n])
'Problem Solving > Online Judge' 카테고리의 다른 글
[BOJ] #11053 - 가장 긴 증가하는 부분 수열 (0) | 2021.06.22 |
---|---|
[BOJ] #12865 - 평범한 배낭 (0) | 2021.06.22 |
[BOJ] #1325 - 효율적인 해킹 (0) | 2021.06.22 |
[BOJ] #1012 - 유기농 배추 (0) | 2021.06.22 |
[BOJ] #2606 - 바이러스 (0) | 2021.06.22 |