본문 바로가기
카테고리 없음

[Java/백준/스택] 9012 - 괄호

by weero 2020. 9. 5.

문제

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

코드

열린괄호( "(" )가 들어올 때 Stack에 쌓고 - push

닫힌괄호( ")" )가 들어올 때 비어있지 않으면 pop

                                    비어있으면 짝이 맞지 않으므로 flag를 false로 돌렸다.

한 줄을 다 읽으면 Stack에 남아있는 것이 없는지, flag가 true인지 검사한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Stack;

public class Main{
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		ArrayList<String> answer = new ArrayList<String>();
		
		for(int i=0; i<N; i++) {
			String ps = br.readLine();
			boolean flag = true;
			Stack<String> stack = new Stack<String>();
			
			for(int j=0; j<ps.length(); j++) {
				if(ps.substring(j,j+1).equals("(")) {
					stack.push("(");
				}else{
					if(stack.isEmpty()) {
						flag = false;
						break;
					}
					stack.pop();
				}
			}
			if(stack.isEmpty() && flag) {
				answer.add("YES");
			}else {
				answer.add("NO");
			}
		}
		
		for(String ans : answer) {
			System.out.println(ans);
		}
	}	
}