LeetCode - 790. Domino and Tromino Tiling

2025. 5. 5. 12:28·Algorithm

문제링크

 

문제 설명

너비가 n, 높이가 2인 보드가 주어집니다. 이 보드를 다음 두 종류의 타일로 채우려 합니다:

  1. 도미노 타일 (2×1)
  2. 트로미노 타일 (L자 모양의 3칸) – 회전 가능

모든 칸은 타일로 정확히 한 번씩 덮여야 하며,
두 타일링이 서로 다르다고 간주되는 경우는 다음과 같습니다:

서로 상하좌우로 인접한 두 칸이 있을 때, 한 타일링에서는 하나의 타일이 두 칸 모두를 덮고 있지만,
다른 타일링에서는 그렇지 않은 경우

정수 n이 주어질 때,
2 × n 보드를 타일링하는 서로 다른 방법의 수를 구하세요.
단, 정답이 매우 클 수 있으므로 10⁹ + 7로 나눈 나머지를 반환하세요.

제한 사항

  • 1 <= n <= 1000

예시

Example 1:

Input: n = 3
Output: 5
Explanation: The five different ways are show above.

 

Example 2:

Input: n = 1
Output: 1

풀이 흐름

  • 백준의 2xn 타일링 문제와 비슷한 것 같습니다.
  • 맨 마지막에 올 수 있는 타일의 종류는 다음과 같습니다.

  • 탑 다운 방식으로 구현했습니다.

코드

class Solution {
    int MOD = 1000000007;
    int[] dp;

    public int numTilings(int n) {
        dp = new int[n + 1];
        dp[0] = 1;
        return f(n);
    }

    private int f(int n) {
        if (n < 0) {
            return 0;
        }
        if (dp[n] != 0) return dp[n];
        dp[n] = ((f(n - 1) % MOD) + (f(n - 2) % MOD)) % MOD;
        for (int i = n - 4; i >= 0; i -= 2) {
            dp[n] = (dp[n] + (f(i) * 2) % MOD) % MOD;
        }
        for (int i = n - 3; i >= 0; i -= 2) {
            dp[n] = (dp[n] + (f(i) * 2) % MOD) % MOD;
        }
        return dp[n] % MOD;
    }
}

'Algorithm' 카테고리의 다른 글

LeetCode - 3337. Total Characters in String After Transformations II  (0) 2025.05.16
LeetCode - 3335. Total Characters in String After Transformations I  (0) 2025.05.13
LeetCode - 1007. Minimum Domino Rotations For Equal Row  (1) 2025.05.04
LeetCode - 2140. Solving Questions With Brainpower  (0) 2025.04.01
LeetCode - 3169. Count Days Without Meetings  (0) 2025.03.24
'Algorithm' 카테고리의 다른 글
  • LeetCode - 3337. Total Characters in String After Transformations II
  • LeetCode - 3335. Total Characters in String After Transformations I
  • LeetCode - 1007. Minimum Domino Rotations For Equal Row
  • LeetCode - 2140. Solving Questions With Brainpower
ggio
ggio
개발 공부를 하며 배운 내용을 기록합니다.
  • ggio
    기록을 하자
    ggio
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • SW마에스트로 (5)
      • System Architecture (8)
      • Algorithm (15)
      • Side Tech Notes (7)
      • CS (5)
      • 취준 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체지향
    ha 아키텍처
    리트코드
    비관락
    분산락
    leetcode
    다중화
    Algorithm
    코딩테스트
    메시지 큐
    토스 NEXT
    매일메일
    프로액터 패턴
    at-least-once
    Programming
    알고리즘
    소프트웨어 마에스트로
    fail back
    fail over
    부트캠프
    코테
    지리적 분산
    시스템 설계
    SW마에스트로
    리액터 패턴
    3PC
    시스템 아키텍쳐
    프로그래밍
    소마
    멀티 코어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ggio
LeetCode - 790. Domino and Tromino Tiling
상단으로

티스토리툴바