[BOJ 9012] 괄호 (java)
문제 링크 https://www.acmicpc.net/problem/9012
문제 풀이
package basics_200;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class BOJ9012 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 테스트케이스 입력
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
// 괄호 입력 받음
Stack<Character> stack = new Stack<Character>();
String s = br.readLine();
int right = 0;
Boolean check = true;
// 문장 돌면서 VPS(올바른 괄호 문자열)인지 판단
for (int j = 0; j < s.length(); j++) {
// 여는 괄호일때 스택에 push
if (s.charAt(j) == '(') {
stack.push(s.charAt(j));
} else { // 닫는 괄호일때 pop
if (stack.size() > 0) {
//여는 괄호가 남아있을때 닫는 괄호 만큼 없애줌
stack.pop();
} else {
//여는 괄호 없고 닫는 괄호가 남을 때
right++;
//NO의 case 2인 경우 때문에 넣어줌
if(stack.size()<right)
check=false;
}
}
}
// VPS(올바른 괄호 문자열)가 아닌 경우
// 1. 닫는 괄호랑 여는 괄호의 갯수가 다를때 (여는 괄호나 닫는 괄호 갯수가 달라 뭐하나 남음)
// 2. 갯수는 같지만 닫는 괄호가 여는 괄호보다 먼저 나올 때 ex) )(()
if (right != stack.size()|| !check) {
System.out.println("NO");
} else {
System.out.println("YES");
}
}
}
}
Comments