https://www.acmicpc.net/problem/4949
1. 아이디어
소괄호와 대괄호가 모두 서로 소거되면 되는 문제로 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.
2. 문제풀이
StringTokenizer로 괄호를 기준으로 파싱한 후 괄호에 대해서 Stack으로 매핑을 시켜주는 방식으로 구현했다.
3. 코드
import java.io.*;
import java.util.*;
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));
StringTokenizer st;
while (true) {
String input = br.readLine();
if (input.equals(".")) break;
Deque<String> stack = new ArrayDeque<>();
st = new StringTokenizer(input, "()[]", true);
boolean flag = true;
while (st.hasMoreTokens()) {
String token = st.nextToken();
if (!(token.equals("(") || token.equals(")") || token.equals("[") || token.equals("]"))) continue;
if (token.equals("(") || token.equals("[")) stack.push(token);
else {
if (stack.isEmpty()) {
flag = false;
break;
} else {
String pop = stack.pop();
if (pop.equals("(")) {
if (token.equals("]")) {
flag = false;
break;
}
} else {
if (token.equals(")")) {
flag = false;
break;
}
}
}
}
}
if (!stack.isEmpty()) flag = false;
if (flag) bw.write("yes\n");
else bw.write("no\n");
}
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 10828번 - 스택 [Java] (0) | 2025.02.12 |
---|---|
[백준] 9012번 - 괄호 [Java] (0) | 2025.02.11 |
[백준] 3986번 - 좋은 단어 [Java] (0) | 2025.02.11 |
[백준] 10799번 - 쇠막대기 [Java] (0) | 2025.02.11 |
[백준] 2573번 - 빙산 [Java] (0) | 2025.02.11 |