https://www.acmicpc.net/problem/15990
15990번: 1, 2, 3 더하기 5
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.
www.acmicpc.net
풀이 과정
https://greentea31.tistory.com/28
백준 9095 - 1, 2, 3 더하기 [파이썬]
https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 과정 정수 n을 1, 2, 3의 합으로 나타내는 방..
greentea31.tistory.com
위의 문제에서 같은 수를 2번 연속으로 사용하면 안된다는 조건만 추가되었다.
D[n][k] => 정수 n을 마지막이 k로 끝나게끔 합으로 나타내는 경우의 수라고 하자.
그렇다면 k에 따라 점화식을 달리 해서 같은 수가 2번 연속으로 나타나지 않도록 조정이 가능하다.
D[n][1] = D[n-1][2] + D[n-1][3]
D[n][2] = D[n-2][1] + D[n-2][3]
D[n][3] + D[n-3][1] + D[n-3][2]
소스 코드
import sys
T = int(sys.stdin.readline())
d = [[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 1, 1, 1]]
for i in range(4, 100001):
d.append([0, (d[i-1][2] + d[i-1][3]) % 1000000009, (d[i-2][1] + d[i-2][3]) % 1000000009, (d[i-3][1] + d[i-3][2]) % 1000000009])
for _ in range(T):
n = int(sys.stdin.readline())
print(sum(d[n]) % 1000000009)
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 2193 - 이친수 [파이썬] (0) | 2022.04.20 |
---|---|
백준 10844 - 쉬운 계단 수 [파이썬] (0) | 2022.04.20 |
백준 16194 - 카드 구매하기 2 [파이썬] (0) | 2022.04.11 |
백준 11052 - 카드 구매하기 [파이썬] (0) | 2022.04.11 |
백준 9095 - 1, 2, 3 더하기 [파이썬] (0) | 2022.04.09 |