스택은 아시다시피 괄호 검사를 할 때 많이 쓰이는 자료구조이다. 추가로 우리 웹사이트의 뒤로 가기와 앞으로 가기 또한 스택 구조를 이용하여 구현한 것이라고 한다.
import java.io.*;
import java.util.Stack;
public class S9012 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Character> stack = new Stack<>();
int T = Integer.parseInt(br.readLine());
loop1:
while(T --> 0) {
String exp = br.readLine().trim();
for (char tmp : exp.toCharArray()) {
if (tmp == '(')
stack.push('(');
else if (tmp == ')') {
if(!stack.contains('(')) {
sb.append("NO\n");
continue loop1;
}
stack.pop();
}
}
sb.append((stack.empty() ? "YES" : "NO") + "\n");
stack.clear();
}
System.out.println(sb);
}
}
괄호 검사하는 건 간단한데, 단지 '('일 때 스택에 '('를 추가하고, ')'일땐 스택에서 '('를 제거하면 된다.
최종적으로 스택이 비어있다면, 괄호는 제대로 작성된 것이고, 아니라면 괄호가 남아있는 것이기에, 올바른 괄호가 아니다.
그리고 ")("에 대한 예외도 처리해야 하는데, 방법은 간단하게 )를 꺼낼 때, 스택이 비어있다면에 대한 조건을 걸면 된다.
'알고리즘 분류 > 스택 알고리즘' 카테고리의 다른 글
에디터 1406 JAVA (0) | 2023.04.09 |
---|---|
스택 수열 1874 JAVA (0) | 2023.04.08 |
4949 균형잡힌 세상 JAVA (0) | 2023.04.06 |
10773 제로 JAVA (0) | 2023.04.06 |
10828 스택 JAVA (0) | 2023.04.06 |