
Stack 문제도 마찬가지로 Deque로 해결하면 더 빠르게 해결할 수 있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
String str="";
while(!(str=br.readLine()).equals(".")){ // 입력된 문자열이 . 하나뿐이면 종료
Deque<Character> de = new ArrayDeque<Character>();
boolean flag = true;
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='(' ||str.charAt(i)=='[')
de.addFirst(str.charAt(i)); // 열린 괄호가 오면 저장
if(str.charAt(i)==')'){ //닫힌 소괄호일때
if(de.isEmpty() || de.getFirst() != '('){ // 비었거나 열린 소괄호가 아니면
flag = false; // flag를 false로
break;
}
else{
de.removeFirst();
}
}
if(str.charAt(i)==']'){ //대괄호 일때
if(de.isEmpty() || de.getFirst() != '['){
flag=false;
break;
}
else{
de.removeFirst();
}
}
}
if(de.isEmpty() && flag) // flag도 true고 Deque가 모두 짝을 이루어 비어졌다면
sb.append("yes \n"); //성공
else
sb.append("no \n");
}
System.out.println(sb);
br.close();
}
}