문제 출처 : 괄호
입력으로 주어진 괄호가 올바르게 구성된 괄호 문자열인지 아닌지를 판별하는 문제이다.
올바르게 구성된 괄호 문자열이 어떤 형식으로 들어오는지를 확인할 필요가 있다.
여기서 올바르게 구성된 괄호란? 한 쌍의 괄호 기호로 구성되어 있는지를 의미한다.
(( -> 올바르게 구성되어 있지 않기 때문에 괄호 문자열이 아니다.
() -> 올바르게 구성되어 있기 때문에 괄호 문자열이다.
(()) -> 올바르게 구성되어 있기 때문에 괄호 문자열이다.
여는 괄호가 있다면 반드시 닫는 괄호가 있어야만 올바른 괄호 문자열이 될 수 있다.
이를 바탕으로 순서대로 처리해야하는 일들을 나열해보면
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
private static String checkVPS(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '(') {
stack.push('(');
} else if (stack.isEmpty()) { // 스택이 비어있는 경우, 닫는 괄호를 입력받았으나 pop할 원소가 없을 경우
return "NO";
} else {
stack.pop();
}
}
return (stack.isEmpty()) ? "YES" : "NO";
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
sb.append(checkVPS(br.readLine())).append("\n");
}
System.out.println(sb);
}
}