[BOJ] 9012번 괄호

Stack(Push,POP)을 이용한 문제이다.

  • 풀이 : 올바른 괄호가 되어야만 YES 그렇지 않으면 No를 출력하는 문제이다. 즉 배열에다 (가 들어오면 Push )가 들어오면 POP을 하여 올바른 괄호가 되면 스택이 비어있어야 한다. 예외로 ))로 들어오는 경우 처음에 )이 배열에 들어오고 나서 )을 POP 해버리면 빈 배열이 되기 때문에 YES가 출력된다. 또 POP을 하기 전에 배열이 빈 배열인지 확인을 해야 한다!!! 만약 배열이 비어있는데 POP을 하면 오류가 나기 때문이다.

  • 느낀점 : 처음에는 "(" 문자열과")"문자열을 하나씩 Counting 하여 같으면 true 다르면 false로 하였는데 그렇게 하면 안 된다!! 왜냐하면 x가 VPS라면 이것을 하나라고 쳐야 하기 때문이다. VPS = () 즉 Counting은 "("와")" 별개로 보기 때문에 안된다!!

var T = Int(readLine()!)!
var stack:[String.Element] = []
for _ in 0..<T {
    var breack = readLine()!
    for i in breack {
        if i == "(" || stack.last == ")" {
            stack.append(i)
        } else {
            if !stack.isEmpty {
                stack.popLast()
            } else {
                stack.append(i)
            }
        }
    }
    if stack.isEmpty {
        print("YES")
        stack = []
    } else {
        print("NO")
        stack = []
    }
}

좋은 웹페이지 즐겨찾기