JAVA/알고리즘 공부
[백준] 9012번: 괄호 (JAVA)
soyeonisgood
2022. 11. 12. 20:51
이 문제는 예제에 대한 해석이 잘 되어야한다.
여는괄호만 스택에 담고(push), 닫는 괄호를 만날 때마다 스택을 하나씩 지운다(pop). 최종적으로 스택이 비어있으면 YES, 그렇지 않으면 NO 이다. 첫 시작이 닫는 괄호로 시작하면 NO 인 것을 잊지말자. 아래 예시를 보고 조건문 로직을 고민해보자.
예시 1.
여는괄호'(' 와 닫는괄호')' 로 크게 바깥을 감싸고, 그 내부도 여는괄호'(' 로 시작해서 닫는괄호')' 로 끝나는 적절한 경우
예시 2.
기본 VPS: 여는괄호'(' 와 닫는괄호')' 가 하나씩 있는 경우
틀린 예시 1.
첫 인덱스가 닫는괄호')' 로 시작
틀린 예시 2.
여는괄호'(' 없이 닫는괄호')' 가 오는 경우
package stack;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class Ex9012 {
public static void main(String[] args) {
try {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt = Integer.parseInt(br.readLine());
while(cnt-- > 0) {
String vps = br.readLine();
Stack<Character> s = new Stack<>();
boolean b = true;
for(int i=0; i<vps.length(); i++) {
if(vps.charAt(i)=='(') {
s.push(vps.charAt(i));
} else {
if(! s.empty()) {
s.pop();
} else { // 닫는 괄호 시작 && 스택에 여는 괄호 없을 때
b = false;
}
}
}
if(!s.empty()) {
b = false;
}
if(b==true) {
sb.append("YES \n");
} else {
sb.append("NO \n");
}
}
System.out.println(sb);
} catch (Exception e) {
e.printStackTrace();
}
}
}