(과 )가 매치되는 지를 YES OR NO로 출력한다.
문장 수를 입력받고 문장들을 처리하는 방식은 단어 뒤집기와 같은 입력 형식을 사용한다.
package src.baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int length = Integer.parseInt(br.readLine());
StringBuilder result = new StringBuilder();
String yn = "";
for (int i = 0; i < length; i++) {
StringTokenizer str = new StringTokenizer(br.readLine(), "");
while (str.hasMoreTokens()) {
String test = str.nextToken();
StringBuffer sb = new StringBuffer(test);
Stack<Character> leftStack = new Stack<Character>();
Stack<Character> rightStack = new Stack<Character>();
for(int j = 0; j < test.length(); j++) {
char character = test.charAt(j);
if(character == '(') { //괄호가 (라면
leftStack.push(character);
} else {
if (!leftStack.isEmpty()) { // 스택이 비지 않았으면 pop인데
leftStack.pop();
} else {
rightStack.push(character);
}
}
}
// yn 여부 파별
if (leftStack.isEmpty() && rightStack.isEmpty()) {
yn = "YES";
} else yn = "NO";
result.append(yn + "\n");
}
}
System.out.println(result);
}
}
결과 : 정답
(를 넣는 leftStack와 )를 넣는 rightStack을 별도로 선언하고
줄마다 괄호를 쪼개는 것은 for문과 charAt()메서드를 사용해서 nextToken()을 처리하는 방식을 썼다.