package com.example.algorithm
import java.util.*
fun main(){
while (true){
val stack = Stack<Char>()
var isBalance = true
val test = readLine()!!
if(test == "."){
break
}
for(c in test){
if(c == '(' || c== '[' || c == '{'){
stack.add(c)
}
if(c == ')'){
if(stack.empty() || stack.pop() != '('){
isBalance = false
}
}
if(c == '}'){
if(stack.empty() || stack.pop() != '{'){
isBalance = false
}
}
if(c == ']'){
if(stack.empty() || stack.pop() != '['){
isBalance = false
}
}
}
if(!stack.empty()){//스택이 비어있지 않다면
isBalance = false
}
if(isBalance){
println("yes")
}else{
println("no")
}
}
}
괄호에 대해 쌍을 지어야 하는 문제므로 괄호의 시작을 만날 때 스택에 집어넣고,
닫는 괄호가 나올시 스택에서 꺼내어 비교하는 방식으로 구현했다.
해당 방식으로만 구현하니 시작괄호만 존재할경우 균형이 잡혀있다고 나와
반복이 끝난 후 스택의 무언가가 남아있다면 균형이 잡혀있지않다고 값을 조절해주었다.
댓글 영역