import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String s = br.readLine();
if(s.equals(".")){
break;
}
System.out.println(brace(s)?"yes":"no");
}
}
private static boolean brace(String s) {
Stack<Character> stack = new Stack<>();
boolean balance = true;
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '[') {
stack.push(c);
}
else if (c == ')') {
if (stack.isEmpty()) {
return false;
}
Character last = stack.pop();
if (last != '(') {
return false;
}
} else if (c == ']') {
if (stack.isEmpty()) {
return false;
}
char last2 = stack.pop();
if (last2 !='[') {
return false;
}
}
}
if(!stack.isEmpty()) {
return false;
}
return balance;
}
}
안쪽에 있는 올바른 괄호 먼저 지워나가면 된다.
모든 괄호가 다 지워지면 균형이 맞는 문자열 -> yes
요지는 안쪽에 있는 괄호를 어떻게 찾을 것이가?
처음 찾을 수 있는 올바른 괄호 -> 처음 닫히는 괄호가 나오면 그 앞에서 열리는 괄호를 찾는다.
stack의 개념 활용