Programing/BaekJoon
[JAVA] 백준 9012 : 괄호
블스뜸
2025. 4. 1. 15:17
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 count = Integer.parseInt(br.readLine());
Character[][] ps = new Character[count][];
for (int i = 0; i < count; i++) {
String line = br.readLine();
Character[] charArray = new Character[line.length()];
for (int j = 0; j < line.length(); j++) {
charArray[j] = line.charAt(j);
}
ps[i] = charArray;
}
for (int i = 0; i < count; i++) {
NodeManager<Character> nodeManager = new NodeManager<>();
boolean flag = false;
for (int j = 0; j < ps[i].length; j++) {
if (ps[i][j] == '(') {
nodeManager.push(new StackNode<>(ps[i][j]));
} else {
if (nodeManager.pop() == null) {
bw.write("NO" + "\n");
flag = true;
break;
}
}
}
if (!nodeManager.isEmpty()) {
bw.write("NO" + "\n");
} else if (!flag) bw.write("YES" + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
class StackNode<T> {
StackNode<T> underNode;
T value;
public StackNode(T value) {
this.value = value;
underNode = null;
}
public T getValue() {
return value;
}
public StackNode<T> getUnderNode() {
return underNode;
}
public void setUnderNode(StackNode<T> underNode) {
this.underNode = underNode;
}
}
class NodeManager<T> {
int size;
StackNode<T> top;
public NodeManager() {
size = 0;
top = null;
}
public int getSize() {
return size;
}
public boolean isEmpty() {
return top == null;
}
public void push(StackNode<T> node) {
if (isEmpty()) {
top = node;
} else {
node.setUnderNode(top);
top = node;
}
size++;
}
public T pop() {
StackNode<T> node = top;
if (isEmpty()) return null;
else if (top.getUnderNode() == null) {
top = null;
} else {
top = top.getUnderNode();
}
size--;
return node.getValue();
}
}