1일1알고/Java Algorithm
[23/04/25] B4949
kim chan jin
2023. 4. 25. 21:04
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class B4949 {
public static void main(String[] args) throws IOException {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
line = br.readLine();
if(line.equals(".")) {
break;
} else {
System.out.println(isBalanced(line));
}
}
}
public static String isBalanced(String line) {
Stack<Character> stack = new Stack<>();
char[] charArr = line.toCharArray();
for(char c : charArr) {
if(c == '(' || c == '[') {
stack.push(c);
}
// 닫는문자 ) 라면
else if(c == ')') {
// 스택에 ( 있는지 또는 스택이 비었는지 확인하고 그러하다면 no
if(stack.empty() || stack.peek() != '(') {
return "no";
}
// 그러하지 않다면 즉, 짝이 맞다면 다음 짝을 찾으러 스택 비우기
else {
stack.pop();
}
}
// 닫는문자 ] 라면
else if(c == ']') {
// 스택에 [ 있는지 또는 스택이 비었는지 확인하고 그러하다면 no
if(stack.empty() || stack.peek() != '[') {
return "no";
}
// 그러하지 않다면 즉, 짝이 맞다면 다음 짝을 찾으러 스택 비우기
else {
stack.pop();
}
}
}
// 위 과정 후에 스택 비어있다면 짝이 맞는 것이기 때문에 yes
if(stack.empty()) {
return "yes";
}
// 위 과정 후에 스택에 뭔가 남아있다면 짝이 안맞는 것이기 때문에 no
else {
return "no";
}
}
}
느낀점
잔머리 굴리지 말자
스택은 해결해야 할 문제를 계속 쌓아둬서 확인할 수 있게 해주는 역할로 생각하자. 아주 쓸모있는 놈이다.
마지막에 스택이 비었는지도 확인하는 것도 포인트