문제에 입력되는 영어 소문자들도 균형을 맞춰라 라고하는 느낌이 있어서 헤매다가 silver 등급의 문제길래 신경쓰지않았다.
신경썼던 부분이
- stack을 static으로 전역에 선언했기 때문에 clear를 잊지않고 해줬어야했다.
- 입력된 모든 문자열을 검사 한 이후에 문제가 없었을 경우 스택이 비어있지 않았다면 실패로 간주
: 여는 괄호 하나만 넣으면 verifyBlank 함수에서 못걸러내기 때문
import java.util.*;
import java.io.*;
public class Main {
static Stack<Character> stack = new Stack<>();
public static void main(String[] agrs) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String text = br.readLine();
if (text.equals(".")) {
break;
}
boolean isSuccess = true;
for (char c : text.toCharArray()) {
try {
verifyBlank(c);
} catch (CustomException ex) {
System.out.println("no");
isSuccess = false;
stack.clear();
break;
}
}
if(!stack.isEmpty()){
System.out.println("no");
isSuccess = false;
stack.clear();
}
if (isSuccess) {
System.out.println("yes");
}
}
}
static void verifyBlank(char c) {
if(c =='.'){
return;
}
if (c == '(' || c == '[') {
stack.add(c);
return;
}
if (c == ')') {
if(stack.isEmpty()){
throw new CustomException();
}
if (stack.peek().equals('(')) {
stack.pop();
} else {
throw new CustomException();
}
} else if (c == ']') {
if(stack.isEmpty()){
throw new CustomException();
}
if (stack.peek().equals('[')) {
stack.pop();
} else {
throw new CustomException();
}
}
}
static class CustomException extends RuntimeException {
public CustomException() {
super();
}
}
}
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 - 10799 JAVA] 쇠막대기 : Stack 사용 (0) | 2023.03.18 |
---|---|
[백준 - 3273 JAVA] 두 수의 합 : set 2개 사용 (0) | 2023.03.18 |
[백준 - 2446 Java] 별찍기 9 (0) | 2023.03.14 |
[백준 - 10828 Java] 스택 (0) | 2023.03.14 |
[백준 - 10808 Java] 알파벳 개수 (0) | 2023.03.14 |