Cometin'

BOJ-1309 - Python

2021-01-26 at Algorithm category

가로 크기 2, 세로 크기 n의 우리가 있을 때, 사자를 넣으려 한다. 사자는 가로, 세로 모두 붙어 있게 배치할 수 없으며 사자가 없을 때도 경우의 수로 계산한다. 이 때 n이 주어진 후 사자를 배치하는 경우의 수가 몇가지인 지 출력하는 문제. n이 1일 때 맨 위의 좌측에 있는 경우 1, 우측에 있는 경우 1, 없는 경우 1을 초기값 설정을 한다. 그 후 2부터 n까지 좌측에 있는 경우의 수는 i-1의 우측 + 없는 경우의 수, 우측에 있는 경우의 수는 i-1의 좌측 + 없는 경우의 수, 없는 경우의 수는 좌측, 우측, 없는 경우의 수를 더하여 풀었다. dp는 더 많이 풀어봐야될 것 같다.

n = int(input())
dp = [[0 for _ in range(3)] for _ in range(n+1)]
dp[1] = [1, 1, 1]

for i in range(2, n+1):
    dp[i][0] = (dp[i-1][1] + dp[i-1][2]) % 9901
    dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % 9901
    dp[i][2] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % 9901

print(sum(dp[n]) % 9901)

hyesungoh

Personal blog by hyesungoh.

I like to share my knowledge for those who wandering in issue.