문제 확인

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

  • 가로 - 세로 길이가 정해져 있기 때문에 DP로 풀 수 있었던 문제다.
  • N 번째 위치에서 가능한 타일링은 가로가 1인 경우(N - 1)와 가로가 2인 경우(N - 2), 총 2가지 이다.
  • 이를 점화식으로 나타내면 아래와 같다.
    • DP[n] = DP[n - 1] + DP[n - 2]
  • 추가로 오버 플로우를 방지하기 위해서, 연산 중간마다 나머지 연산을 진행했다.
  • 이는 나머지 연산의 분배 법칙을 통해 가능하다.
# (n x 2) 바닥 채우기
# n 번째 바닥 
def solution(n):
    # 경우의 수 저장
    DP = [1, 2]
    for i in range(2, n):
        DP.append((DP[i - 2] + DP[i - 1]) % 1000000007)
    return DP[n - 1] % 1000000007