220208 - 2 X N 타일링

이상해씨·2022년 2월 8일
0

알고리즘 풀이

목록 보기
43/94

◾ 2 x n 타일링 : 프로그래머스 LEVEL 3

문제

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

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

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

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


입력

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

출력

  • 직사각형을 채우는 방법의 수

입출력 예

nresult
45

◾ 풀이

1. 해설

  • 동적 계획법을 사용하여 해결할 수 있다.
  • 타일을 가로 또는 세로로 배치할 수 있다.
    • (n-1)의 경우에 세로 타일을 배치하는 경우
    • (n-2)의 경우에 가로 타일을 배치하는 경우
    • f(n) = f(n-1) + f(n-2) (단, n > 1)

2. 프로그램

  1. dp 초기값 설정
  2. n일 경우까지 경우의 수를 차례로 계산
  3. n인 경우의 값 반환
# 코드
def solution(n):
    answer = 0

    dp = [0] * (n+1)
    dp[0], dp[1] = 1, 1

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

    return answer

profile
후라이드 치킨

0개의 댓글

관련 채용 정보