sm 기술 블로그

153. 9012(괄호) - 자바 본문

문제/백준_자바

153. 9012(괄호) - 자바

sm_hope 2022. 7. 21. 20:29
import java.util.*;
import java.io.*;

class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());

		for (int i = 0; i < T; i++) {
			String[] S = br.readLine().split("");
			Stack<String> stack = new Stack<>();

			for (int j = 0; j < S.length; j++) {
				if(S[j].equals("(")) {
					stack.add(S[j]);
				}
				else {
					try {stack.pop();}
					catch(Exception e) {
						stack.add("a");
						break;
					}
				}
			}
			
			if(stack.size() == 0) {
				sb.append("YES").append("\n");
			}else {
				sb.append("NO").append("\n");
			}
		}
		
		System.out.print(sb);
	}
}

문제요약

괄호가 형식이 맞으면 YES를 아니면 NO를 출력하라.

설명

간단한 문제이다.

 

입력받은 값을 앞에서 부터 뽑아내면서 만약 '('가 나오면 스택에 값을 넣고 ')'가 나온다면 스택에 있는 값을 빼낸다.

[만약 뒤에서 부터 진행한다면 ')'값을 넣고 '('을 빼야할 것이다.]

 

				if(S[j].equals("(")) {
					stack.add(S[j]);
				}

( 인 경우에는 스택에 값을 넣는다.

 

				else {
					try {stack.pop();}
					catch(Exception e) {
						stack.add("a");
						break;
					}
				}

) 인 경우에는 스택에 값을 뺀다.

빼봤을 때 값이 없다면 에러가 발생하는데 에러가 발생하면 stack에 1을 넣고 입력값 반복문을 종료한다.

 

			if(stack.size() == 0) {
				sb.append("YES").append("\n");
			}else {
				sb.append("NO").append("\n");
			}

스택 안에 값이 있다면 형식이 안맞는 것이므로 NO를 출력하고 스택내에 값이 없다면 YES를 출력한다.

'문제 > 백준_자바' 카테고리의 다른 글

155. 1874(스택 수열) - 자바  (0) 2022.07.22
154. 4949(균형잡힌 세상) - 자바  (0) 2022.07.22
151. 10828(스택) - 자바  (0) 2022.07.20
150. 13305(주유소) - 자바  (0) 2022.07.19
149. 1541(잃어버린 괄호) - 자바  (0) 2022.07.18
Comments