Algorithm/백준

백준 | 9012번 :: 괄호

jihyun03 2020. 8. 9. 15:29

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

 

9012번: 괄호

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

www.acmicpc.net

🎈 문제 풀이

 

올바른 괄호는 1. 스택이 비어있고, 2. 모든 문자를 반복문에서 돌려야 한다. 

 

🎈 소스 코드

package BaekJoon.Collection;

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

public class Q9012_1 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int T = Integer.parseInt(st.nextToken());

		for(int i=0; i<T; i++) {
			Stack<Character> stack = new Stack<>();
			String ps = br.readLine();
			int len;
			for(len=0; len<ps.length(); len++) {
				char c = ps.charAt(len);
				if(c == '(') stack.push(c);
				if(c == ')') {
					if (!stack.isEmpty() && stack.peek() == '(') stack.pop();
					else { // 스택이 비어있는 경우 또는 잘못된 괄호인 경우
						break;
					}
				}
				// 문자는 그냥 패스
			}

			if(len==ps.length() && stack.size() == 0) { System.out.println("YES"); }
			else System.out.println("NO"); // len != ps.length() || stack.size() > 0 인 경우
		}
	}
}

 

🎈 기억할 것

- String에서 char형으로 변환

String str = "a";

char c = str.charAt(0);

 

- 반복문 람다식 처리 while(T-->0) { ........ }  

 

- 조건문을 좀 더 단순하게 처리하고자 한다면 flag를 사용하자!

 

boolean flag = true;
....

while(T-->0) {
......

else if(c == ')') {
	if(.........
    else {
    	flag = false;
        break;
    }
}