본문 바로가기

알고리즘(w.KOTLIN)/그리디(Greedy)

[백준][코틀린][12904] A와 B

728x90

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

 

12904번: A와 B

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수

www.acmicpc.net

문제 풀이

1. S 를 문자열을 바꾸는 조건을 이용하여 완전 탐색을 할 경우 시간 초과가 발생한다.

2. 타겟 문자인 T에 대해서 마지막 글자가 'A' 라면 이전의 글자에 'A' 만 더한 것이 된다.

3. 마찬가지로 T의 마지막 글자가 'B'라면 'B' 를 제외한 T를 뒤집는다.

4. S == T 일 경우 1을 출력하고 T의 길이가 1이 될때까지 탐색이 되었다면 0을 출력한다.

코드

import java.io.*

fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val S = br.readLine()
    val T = br.readLine()
    var word = T

    while (true) {
        if (S == word) {
            println(1)
            break
        }

        if (word.length == 1) {
            println(0)
            break
        }

        val index = word.length - 1

        if (word[index] == 'A') {
            word = word.substring(0, index)
        } else if (word[index] == 'B') {
            word = word.substring(0, index)
            word = word.reversed()
        }
    }
}
728x90