문제 링크

풀이 과정

전체 코드

def solution(n, tops):
    # 나머지
    mode = 10007
    
    # 사다리꼴 i번째 윗변을 역마름모로 채우는 방법
    reverse_rhombus = [0 for _ in range(n+1)]
    reverse_rhombus[1] = 1
    
    # 사다리꼴 i번째 윗변을 나머지 도형으로 채우는 방법
    not_reverse_rhombus = [0 for _ in range(n+1)]
    if tops[0] == 0:    not_reverse_rhombus[1] = 2
    else:   not_reverse_rhombus[1] = 3
    
    for i in range(2, n+1):
        if tops[i-1] == 0:  # 사다리꼴 i번째 윗변에 정삼각형이 없는 경우
            not_reverse_rhombus[i] = (
                reverse_rhombus[i-1] + 2 * not_reverse_rhombus[i-1]
            ) % mode
        else:  # 사다리꼴 i번째 윗변에 정삼각형이 있는 경우
            not_reverse_rhombus[i] = (
                2 * reverse_rhombus[i-1] + 3 * not_reverse_rhombus[i-1]
            ) % mode
        reverse_rhombus[i] = (reverse_rhombus[i-1] + not_reverse_rhombus[i-1]) % mode
    
    return (not_reverse_rhombus[n] + reverse_rhombus[n]) % mode