해당 문제는 스택을 활용하여 풀이할 수 있다.
import java.util.*;
import java.io.*;
public class Main{
public static void main (String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for(int i = 0; i<n; i++){
String s = br.readLine();
if(isBalanced(s)){
bw.write("YES\n");
} else {
bw.write("NO\n");
}
}
bw.close();
br.close();
}
public static boolean isBalanced(String s){
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
if(c == '('){
stack.push(c);
}else {
if(stack.isEmpty()){
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
}
br.readLine()으로 괄호를 스트링으로 변환하는 부분에서 만약 스트링의 길이가 홀수인 경우 "No"를 출력하도록 하면 연산을 더 간단하게 할 수도 있을 것 같다는 생각이 든다.