
그리고 괄호가 아닌 문자의 경우 그냥 넘어간다.
import java.util.Scanner;
import java.util.Stack;
public class VPS_World {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s;
while(true){
s = sc.nextLine();
if (s.equals(".")){
break;
}
System.out.println(solve(s));
}
}
private static String solve(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i<s.length(); i++){
char c = s.charAt(i);
if(c == '(' || c == '['){
stack.push(c);
} else if (c == ')') {
if (stack.empty() || stack.peek() != '('){
return "no";
}
else{
stack.pop();
}
} else if (c == ']') {
if (stack.empty() || stack.peek() != '['){
return "no";
}
else {
stack.pop();
}
}
}
if (stack.empty()){
return "yes";
}
else {
return "no";
}
}
}
String s를 입력받고 종료조건 '.' 을 선언한다.
s를 한글자 씩 비교해가며, ( 혹은 [에 해당할 경우 stack에 삽입하여준다.
닫는 괄호{')'}가 먼저 나왔을 경우 스택이 비어있는지(매칭 실패)확인하고 혹은 스택 최상단에 존재하는 원소가 '(' 가 아닐 경우 (괄호 끼리 매칭 실패) no를 반환한다
두가지 경우에 해당하지 않는 경우 즉,괄호가 나왔는데 스택이 비어있지 않고 스택끼리 매칭이 잘 되었을 때는 stack.pop()
다른 경우에도 마찬가지로 진행하고 마지막에 stack이 비어있으면 "yes" 아니면 "no"를 반환한다