[BOJ 9012] 괄호 (java)

less than 1 minute read

:pencil2: 문제 링크 https://www.acmicpc.net/problem/9012 :pencil2:

문제 풀이

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