코딩테스트/백준

[백준] 9012.괄호 (Swift)

도지대디 2022. 6. 20. 04:00

[백준] 9012.괄호 (Swift)

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

 

9012번: 괄호

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

www.acmicpc.net

풀이

스택을 이용해 해결할 수 있는 간단한 문제입니다.

 

괄호는 무조건 한 쌍으로 이루어져야 하며 괄호가 열리면 무조건 괄호는 닫혀야 합니다. 스택을 이용해 괄호의 유효성을 판단하는것은 굉장히 간단합니다.

 

( 가 나오면 스택에 push 하고 ) 가 나오면 pop 하는 것이 전부입니다.

 

하지만 pop 할 시 스택이 비어있다면 해당 괄호 set 은 유효하지 않습니다. 혹은 모든 push 와 pop 이 끝나고 난 후에도 스택에 남아있는 원소가 존재한다면 해당 괄호 set 또한 유효하지 않다고 볼 수 있습니다.

 

문자열의 문자들을 하나씩 탐색하며 위 방법을 반복하면 문제를 해결할 수 있습니다.

코드

import Foundation
var n: Int = Int(readLine()!)!
var answer: String = ""
var stack: [String] = []
var isVPS: Bool
for _ in 0 ..< n {
isVPS = true
stack.removeAll()
let bracket: String = readLine()!
for b in bracket {
if b == "(" { // ( 나오면 push
stack.append("(")
} else { // ) 나왔는데
if stack.isEmpty { // 비었으면 false 저장 후 break
isVPS = false
break
} else { // 정상이면 pop
stack.removeLast()
}
}
}
if !stack.isEmpty {
answer += "NO\n"
} else if isVPS {
answer += "YES\n"
} else {
answer += "NO\n"
}
}
print(answer)
view raw BOJ_9012.swift hosted with ❤ by GitHub