[프로그래머스 스쿨][Python] 3 x n 타일링

2023. 1. 31. 20:16알고리즘 문제풀이

반응형

문제

문제 설명

가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 3이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다

  • 타일을 가로로 배치 하는 경우
  • 타일을 세로로 배치 하는 경우

예를들어서 n이 8인 직사각형은 다음과 같이 채울 수 있습니다.

직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.

제한사항

  • 가로의 길이 n은 5,000이하의 자연수 입니다.
  • 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.

입출력 예시

n result
4 11

문제: 프로그래머스 스쿨 - 연습문제 - 3 x n 타일링


문제 풀이

유의사항

  • 출력 결과가 너무 커져서 표현 가능한 수의 범위를 넘어가기에, 계산 중간중간에 1,000,000,007으로 나눈 나머지를 반드시 넣어주여야 한다.
  • 이 문제에서 요구하는 경우의 수를 수열이라 했을 때, 이에 대한 점화식은 아래와 같다.

  • 길이가 늘어날 때 마다, 아래와 같은 모양이 2개씩 추가되기에, 위와같은 점화식이 나온다.

추가된 가로의 길이가 6일때, 점화식의 2 x ...에 해당하는 부분


전체 코드

def solution(n):
    answer = 1
    sum_before = 0

    for i in range(n//2):
        tmp = answer
        answer = (3 * answer + 2*sum_before) % 1000000007 # 점화식 
        sum_before += tmp

    return answer
반응형