DP : 타일 채우기 [백준 2133, Kotlin]

2023. 1. 24. 20:55· 알고리즘
목차
  1. [문제]
  2. [풀이]
  3. [코드]
  4. [출처]

[문제]

문제

3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.

입력

첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다.

출력

첫째 줄에 경우의 수를 출력한다.

힌트

아래 그림은 3×12 벽을 타일로 채운 예시이다.

[풀이]

n = 2

3

 

n = 4

3 * 3 + 2 =11

 

n = 6

11 * 3 + 2 * 3 + 2 = 41 

 

n = 8

41 * 3 + 2 * 11 + 2 * 3 + 2 = 123 + 22 + 6 + 2 = 153

 

즉

 

A[2n] = 3 * [2n-2] + [2n-2] - [2n-4] -> A[2n] = 4A[2n-2] - A[2n-4]

 

dp array 크기를 최대로 해도 되지만 메모리 절약을 위해

1과 3은 0으로 return

2는 3으로 return

 

n> 4 이상이면

2개씩 증가하면서 짝수만 값 갱신

 

[코드]

 

import java.io.BufferedReader
import java.io.InputStreamReader

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val n = br.readLine().toInt()

    if (n == 1 || n == 3) {
        println(0)
        return
    }

    if (n == 2) {
        println(3)
        return
    }

    val dp = IntArray(n + 1) { 0 }
    dp[0] = 1
    dp[2] = 3

    for (i in 4..n step (2)) {
        dp[i] = 4 * dp[i - 2] - dp[i - 4]
    }
    println(dp[n])
}

[출처]

https://www.acmicpc.net/problem/2133

 

2133번: 타일 채우기

3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.

www.acmicpc.net

 

'알고리즘' 카테고리의 다른 글

Dijkstra : 파티 [백준 1238, Kotlin]  (0) 2023.01.28
DP : 병사 배치하기 [백준 18353, Kotlin]  (0) 2023.01.24
DP : 동전 1 [백준 2293, Kotlin]  (0) 2023.01.23
DP : 퇴사 [백준 14501, Kotlin]  (0) 2023.01.23
DP : 정수 삼각형 [백준 1932, Kotlin]  (0) 2023.01.22
  1. [문제]
  2. [풀이]
  3. [코드]
  4. [출처]
'알고리즘' 카테고리의 다른 글
  • Dijkstra : 파티 [백준 1238, Kotlin]
  • DP : 병사 배치하기 [백준 18353, Kotlin]
  • DP : 동전 1 [백준 2293, Kotlin]
  • DP : 퇴사 [백준 14501, Kotlin]
베르_최성훈
베르_최성훈
베르_최성훈
베르의 안드로이드
베르_최성훈
전체
오늘
어제
  • 분류 전체보기 (57)
    • 우아한테크코스 (15)
    • Android (19)
    • kotlin (2)
    • 회고 (5)
    • Bug Fix (2)
    • 알고리즘 (6)
    • 기타 (1)
    • Jetpack Compose (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프래그먼트
  • PRESENTER
  • 회고
  • flow
  • coroutine
  • MVVM
  • 우아한테크코스
  • MVP
  • Kotlin
  • Android
  • Test
  • ViewModel
  • Lifecycle
  • 생명주기
  • 코틀린
  • SharedFlow
  • 우테코
  • FRAGMENT
  • 안드로이드
  • 페스타고

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
베르_최성훈
DP : 타일 채우기 [백준 2133, Kotlin]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.