흙금이네 블로그

[BOJ] 1563 - 개근상 (Python) 본문

알고리즘

[BOJ] 1563 - 개근상 (Python)

흙금 2023. 5. 3. 17:27

 

 

아이디어

 

동적 계획법으로 개근상을 받을 수 있는 출결 정보의 개수를 더해 나간다.

 

 

풀이

 

dp[i][j][k]에서 i는 일수의 인덱스, j는 지각 횟수, k는 연속 결석 횟수를 나타낸다.

 

def solution():
    N = int(input())
    p = 1000000
    dp = [[[0]*3 for _ in range(2)] for _ in range(N)]
    dp[0][0][0] = dp[0][1][0] = dp[0][0][1] = 1
    for i in range(N-1):
        dp[i+1][0][0] = (dp[i][0][0]+dp[i][0][1]+dp[i][0][2])%p
        dp[i+1][0][1] = dp[i][0][0]
        dp[i+1][0][2] = dp[i][0][1]
        dp[i+1][1][0] = (dp[i+1][0][0]+dp[i][1][0]+dp[i][1][1]+dp[i][1][2])%p
        dp[i+1][1][1] = dp[i][1][0]
        dp[i+1][1][2] = dp[i][1][1]
    res = 0
    for li in dp[-1]:
        res += sum(li)%p
    print(res%p)

solution()

 

Comments