경험의 기록

문제

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

 

9012번: 괄호

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

www.acmicpc.net

 

풀이

0. 문제 해석

괄호는 짝이 맞아야 하므로 스택을 활용해야 한다.

 

  1. 여는 괄호면 스택에 추가한다.
  2. 닫는 괄호일 때, 스택이 비어있거나 스택에서 pop 하여 그 값이 닫는 괄호면  NO 리턴
  3. 전체 괄호 검사 후 스택에 남아있는 문자가 있을 경우 NO 리턴
  4. 2,3번에서 리턴되지 않았을 경우 YES 리턴

 

 

1. 전체 코드

// [백준] 9012. 괄호 (Kotlin)
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*

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

    for(i in 0 until n) {
        val str = readLine()
        solve(str)
    }
}

fun solve(str: String){
    val stack = Stack<Char>()

    for(i in str){
        // 여는 괄호면 추가
        if(i == '('){
            stack.add(i)
        }
        // 닫는 괄호일 때
        else if(i == ')'){
            // 비어 있을 때
            if(stack.isEmpty()){
                println("NO")
                return
            }
            // 짝이 맞지 않을 때
            if(stack.pop() == ')'){
                println("NO")
                return
            }
        }
    }

    // 연산 종료 시 스택이 비어있어야 YES
    if(stack.isEmpty()){
        println("YES")
    }
    else{
        println("NO")
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading