본문 바로가기
스터디(beakjoon)

Kotlin] 백준 9012번 문제풀이

by 김마리님 2024. 4. 3.

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

더보기

이 문제는 스택을 이용하면 간단하다.

(는 무조건 스택에 넣고, )가 왔을 때 괄호가 만들어질거 같으면 빼면 되고..

(가 없을때 ) 가 오면 잘못됐고, 괄호를 다 완성 시킨거 같은데 스택에 (이 남아 있으면 잘못됐다고 하면 된다.

 

이를 코드로 만들면

import java.util.Stack

fun main(args: Array<String>) {
    question9012()
}

fun question9012() {
    val count = readln().toInt()
    loop@ for (i in 1 .. count) {
        val stack = Stack<Char>()
        val strings = readln()
        for (j in 0 ..< strings.count()) {
            val string = strings[j]
            // ( 면 스택 추가
            if(string == '(') {
                stack.push(string)
            } else {
                if(stack.isNotEmpty()) {
                // (이 있으면 ()이 만들어졌다 가정해서 스택에서 빼버림
                    stack.pop()
                } else {
                // (이 없으면 )만 있다는 것으로 가정, 올바른 괄호문자가 아니므로 잘못됨을 표기하고 새 문자를 받음
                    println("NO")
                    continue@loop
                }
            }
        }

		// 문자 배열을 다 돌고 스택에 값이 남아있으면 (이 남았다는 뜻이므로 잘못된 문자, 다 비었으면 없다는 뜻이므로 잘된 문자.
        if(stack.empty()) {
            println("YES")
        } else {
            println("NO")
        }
    }
}

  

반응형