본문 바로가기
BOJ

[BOJ] [JAVA] 9012번 괄호

by Parsler 2024. 1. 7.

드디어 stack 자료 구조를 배우고 이 문제를 다시 풀었다!

 

9012번: 괄호

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

www.acmicpc.net

입력된 String의 i번째 character가 ')' 인 경우 : stack에 아무것도 남아있지 않는 상태인 경우 곧바로 VPS가 아님을 알 수 있다.

(만약 stack에 무언가가 남아있다면 그것은 반드시 '('일 것이다!)

입력된 String의 i번째 character가 '(' 인 경우 : 다음에 오는 것이 ')'라면 ()가 만나기 때문에 pop되어 사라진다.

반대로 다음에 오는 것이 '('라면 그대로 추가해주면 된다.

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		for (int t = 0; t < T; t++) {
			Stack<Character> stack = new Stack<>();
			
			String str = br.readLine();
			
			for (int i = 0; i < str.length(); i++) {
				char c = str.charAt(i);
				if (c == '(') {
					stack.push(c);
				} else {
					if (stack.isEmpty()) {
						stack.push(c);
						break;
					} else stack.pop();
				}
			}
			if (stack.isEmpty()) System.out.println("YES");
			else System.out.println("NO");
		}
	}
}

Yes, No로 출력되게끔 코드를 짜서 문제를 몇번 틀렸다,,

문제를 잘 읽자!