728x90
1. 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class BOJ_4949_균형잡힌세상 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> stack;
StringBuilder sb = new StringBuilder();
while (true) {
String line = in.readLine();
if (line.equals(".")) break;
stack = new Stack<>();
for (int i = 0; i < line.length(); i++) {
char ch = line.charAt(i);
if (ch != '(' && ch != '[' && ch != ')' && ch != ']') continue;
if (ch == '(' || ch == '[') stack.push(ch);
else if (stack.empty()) {
stack.push('*'); //체크위해서 넣어둠
break;
} else if (ch == ')' && stack.peek() == '(') stack.pop();
else if (ch == ']' && stack.peek() == '[') stack.pop();
else break;
}
if (stack.empty()) sb.append("yes\n");
else sb.append("no\n");
}
System.out.print(sb);
}
}
정상적으로 반복문을 진행하는 경우는 세 가지다.
1. '(' 이거나 '['일 때 : push한다.
2. ')'이면서 가장 최근에 저장된 요소가 '('일 때 : pop한다.
3. ']'이면서 가장 최근에 저장된 요소가 '['일 때 : pop한다.
이 경우 외에는 모두 균형잡히지 않은 문자열이므로 반복문을 종료한다.
stack.empty()인 경우를 먼저 제거하고 2,3번 경우를 체크한 이유는 peek() 메서드는 stack이 비어있다면 오류가 나기 때문이다.
2. 결과
2022.02.05 - [알고리즘] - [BOJ] 9012 괄호 - JAVA 이 문제와 비슷해서 쉽게 풀 수 있었다.
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 17298 오큰수 - JAVA (0) | 2022.02.05 |
---|---|
[BOJ] 1874 스택수열 - JAVA (0) | 2022.02.05 |
[BOJ] 9012 괄호 - JAVA (0) | 2022.02.05 |
[BOJ] 10772 제로 - JAVA (0) | 2022.02.05 |
[BOJ] 10828 스택 - JAVA (0) | 2022.02.05 |
댓글