본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 9012번] 괄호(JAVA)

by 테크케찰 2020. 7. 29.

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

 

9012번: 괄호

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

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	
	public static void main(String args[]) throws Exception {
		int num=Integer.parseInt(br.readLine());
		for(int i=0;i<num;i++) {
			Stack<Character> stack=new Stack<>();
			String str=br.readLine();
			for(int j=0;j<str.length();j++) {
				if(str.charAt(j)==')') {
					if(!stack.isEmpty()) {
						if(stack.peek()=='(') {
							stack.pop();
						}
						else stack.push(str.charAt(j));
					}
					else stack.push(str.charAt(j));
				}
				else stack.push(str.charAt(j));
			}
			if(stack.isEmpty()) System.out.println("YES");
			else System.out.println("NO");
		}
	}
	
}

 자바 스택 클래스를 이용해서 구현해보았습니다.

이 문제의 핵심은 '('가 있으면 이에 대응하는 ')'가 언젠가는 나와야한다는 것이었습니다.

그래서 저는 스택에 ')'가 push되었을 때 스택의 최상단에 '('가 있는지를 파악하고 '('가 있으면 스택에서 pop을 호출하는방법을 썼습니다.

그래서 마지막에 스택이 비어있으면 모든 괄호가 짝이 있는 경우이고, 그렇지 않으면 괄호가 짝이 없는 경우로 판단해, 전자의 경우에는 'YES', 후자의 경우에는 'NO'를 출력하였습니다.

 

'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글

[BOJ 2164번] 카드2(자바)  (0) 2020.07.31
[BOJ 18258번] 큐 2(JAVA)  (0) 2020.07.31
[BOJ 1874번] 스택 수열(Java)  (0) 2020.07.24
[BOJ 10773번] 제로(Java)  (0) 2020.07.23
[BOJ 10828번] 스택 (Java)  (0) 2020.07.23