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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바