Uknow's Lab.
article thumbnail

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

 

9625번: BABBA

상근이는 길을 걷다가 신기한 기계를 발견했다. 기계는 매우 매우 큰 화면과 버튼 하나로 이루어져 있다. 기계를 발견했을 때, 화면에는 A만 표시되어져 있었다. 버튼을 누르니 글자가 B로 변했

www.acmicpc.net

 

난이도 : 실버 5
태그 : 다이나믹 프로그래밍

 

 

설명

 

규칙을 찾아 풀 수 있는 다이나믹 프로그래밍 문제입니다.

 

회차 문자열 A B
0 A 1 0
1 B 0 1
2 BA 1 1
3 BAB 1 2
4 BABBA 2 3
5 BABBABAB 3 5

 

회차가 오를 때마다,

A는 이전 회차의 B,

B는 이전 회차의 A + B의 값과 같습니다.

 

즉 A[i] = B[i-1] (i > 0, A[0] = 1)

B[i] = A[i-1] + B[i-1] (i > 0, B[0] = 1) 으로 나타낼 수 있습니다.

 

 

소스코드

fun main() {
    val k = readln().toInt()

    val dpA = Array(k + 1) { 0 }
    val dpB = Array(k + 1) { 0 }
    dpA[0] = 1
    dpB[0] = 0
    dpA[1] = 0
    dpB[1] = 1

    for (i in 1..k) {
        dpA[i] = dpB[i - 1]
        dpB[i] = dpA[i - 1] + dpB[i - 1]
    }

    println("${dpA[k]} ${dpB[k]}")
}

 

위에서 구한 점화식을 코드로 그대로 나타내면 됩니다.

 

 

후기

회차에 따라 하나씩 값을 구하면서 규칙을 찾아 풀 수 있는 문제였습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.