알고리즘

[Lv_3] 산 모양 타일링

빅디 2024. 1. 25. 01:18
728x90
def solution(n, tops):
    answer = 0
    div = 10007
    
    # 우하단 마름모를 제외한 경우의 수 배열
    a = [0] * (n + 1)
    # 우하단 마름모만을 포함하는 경우의 수 배열
    b = [0] * (n + 1)
    
    a[0] = 1
    
    for i in range(0, n):
    	# 현재 순회 중 top 존재 시 발생 경우의 수 확인
        if (tops[i] == 1):
            a[i + 1] = a[i] * 3 + b[i] * 2
        else: 
            a[i + 1] = a[i] * 2 + b[i] * 1
            
        # 현재 정삼각형에서 우하단 마름모인 경우는 앞선 경우의 수와 무관    
        b[i + 1] = a[i] + b[i]
        
        a[i + 1] = a[i + 1] % div;
        b[i + 1] = b[i + 1] % div;
    
    return (a[n] + b[n]) % div

 

✔️ 링크: 코딩테스트 연습 - 산 모양 타일링 | 프로그래머스 스쿨 (programmers.co.kr)