[백준 9012]- 괄호- JAVA [스택 구현]
본문 바로가기

알고리즘/백준

[백준 9012]- 괄호- JAVA [스택 구현]

728x90
반응형

안녕하세요 놀이방 사장입니다.

 

이번 포스팅은 

백준 "9012"

괄호 포스팅입니다.

 

 

9012번: 괄호

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

www.acmicpc.net

 

문제설명

()()() 이렇씩으로 괄호가 짝이 맞는지 확인하는 문제이다

(()) -> 이것도 짝이 맞음

))(( -> 짝이 제대로 맞지 않음 

짝이 맞는 예제는 YES , 짝이 맞지 않은 예제는 NO를 출력해주면 된다.

 

스택으로 구현하면 쉽게 구현 할 수 있다.

/*
* 백준 9012 괄호 
* 스택 사용
* */
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Main{
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<Character> stack = new Stack<>();

        int n = Integer.parseInt(br.readLine());
        for(int i = 0; i<n; i++){
            String S = br.readLine();
            stack.clear();
            boolean chkFlag = true;
            for(int j = 0; j<S.length(); j++){
                if(S.charAt(j) == '('){
                    stack.push('(');
                }else{
                    if(stack.isEmpty()){
                        chkFlag = false;
                        break;
                    }else{
                        stack.pop();
                    }
                }
            }
            if(chkFlag && stack.isEmpty()){
                System.out.println("YES");
            }else{
                System.out.println("NO");
            }
        }
    }
}

 

 

문자열에서 ( 이 나오면 스택에 값을 추가해준다

그리고 ) 가 나오면 스택에 값이 있는지 확인한다

왜냐하면 ) 가 먼저나오면 짝이 될 수 가 없어서 바로 for을 멈추고 NO를 출력해준다.

스택이 비어있지않으면 pop를 통해 ( 를 빼내준다.

 

그 후 짝이 맞으면 스택이 비어 있을 것임

그래서 마지막에 스택이 비었는지 확인해서 스택이 비어있으면 "YES" 비어있지 않다 ? 그러면 짝이 맞지 않다는 것이 때문에 "NO"를 출력해준다.

 

이렇게 괄호를 풀어주면 됩니다!

감사합니다~

 

반응형