[Kotlin] 백준(BOJ) 11727 2xn 타일링 2

2026. 2. 8. 02:50·Problem Solving

문제 전문은 아래 버튼을 눌러 확인하실  수 있습니다.

더보기

문제

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

 

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

 

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

 

예제 입출력

 

문제 해설

비슷한 문제를 수업시간에 배웠던 적이 있어 그 방법을 이용하여 해결했다. 약간 분할 정복 느낌으로 점화식을 도출할 수 있다. 

 

 $2 \times n$ 직사각형의 마지막을 채우는 방법은 다음과 같다

 

세로 $2 \times 1$ 타일 1개 

이 경우 앞의 직사각형을 채우는 경우는 $dp[n-1]$이다. 

 

가로 $1 \times 2$ 타일 2개

이 경우 앞의 직사각형을 채우는 경우는 $dp[n-2]$이다. 

 

$2 \times 2$ 타일 1개 

이 경우 앞의 직사각형을 채우는 경우는 $dp[n-2]$이다. 

 

위 경우를 더한 것이 전체 경우의 수이므로, $dp[n] = dp[n-1] + 2 \times dp[n-2]$ 라는 점화식을 도출할 수 있다.

 

또한 $n$이 $1$일 때 전체 경우의 수는  세로 $2 \times 1$ 타일 $1$개 뿐이므로 $1$, 

$2$일 경우는 위 마지막 타일을 채우는 경우와 동일한 경우의 수이므로 $3$이다. 

 

위 로직을 다음과 같이 구현할 수 있다.

소스 코드

fun main() {
    val n = readln().toInt()
    val MOD = 10007

    val dp = IntArray(n + 1)

    dp[1] = 1 // 기저값
    if (n >= 2) dp[2] = 3

    for (i in 3..n) {
        dp[i] = (dp[i - 1] + 2 * dp[i - 2]) % MOD
    }

    println(dp[n])
}

 

시간 복잡도

for문에서 상수번 연산을 수행하므로, 

코드의 전체 시간 복잡도는 $O(N)$ 이라고 할 수 있겠다. 

'Problem Solving' 카테고리의 다른 글

[Kotlin] 백준(BOJ) 2193 이친수  (0) 2026.02.09
[Kotlin] 백준(BOJ) 1912 연속합  (0) 2026.02.07
[Kotlin] 백준(BOJ) 9461 파도반 수열  (0) 2026.02.06
[Kotlin] 백준(BOJ) 11053 가장 긴 증가하는 부분 수열  (1) 2026.02.04
[Kotlin] 백준(BOJ) 1149 RGB거리  (0) 2026.02.03
'Problem Solving' 카테고리의 다른 글
  • [Kotlin] 백준(BOJ) 2193 이친수
  • [Kotlin] 백준(BOJ) 1912 연속합
  • [Kotlin] 백준(BOJ) 9461 파도반 수열
  • [Kotlin] 백준(BOJ) 11053 가장 긴 증가하는 부분 수열
Kirbyyy
Kirbyyy
개인적인 일상과 회고를 기록하는 블로그입니다.
  • Kirbyyy
    커브볼의 생존일지
    Kirbyyy
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 우아한테크코스 (8)
      • 프로덕트 빌드 (0)
      • Problem Solving (20)
      • C++ (0)
      • Kotlin (19)
      • Java (3)
      • CS (2)
        • AI (2)
      • 취미생활 (0)
        • 서평 (0)
        • 프라모델 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    백준 31575
    ProblemSolving
    백준
    다이나믹 프로그래밍
    백준 11123
    백준 33272
    백준 RGB 거리
    너비 우선 탐색
    우테코 8기
    분할 정복
    Problem Solving
    백준 연속 합
    C++
    백준 16174
    백준 1356
    백준 16173
    백준 알고리즘
    그리디 알고리즘
    백준 파도반 수열
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Kirbyyy
[Kotlin] 백준(BOJ) 11727 2xn 타일링 2
상단으로

티스토리툴바