본문 바로가기

백준 풀이

백준 9012 - 괄호

깃허브:

https://github.com/MSIQOC/BOJ/blob/master/b9012_%EA%B4%84%ED%98%B8.java

 

www.acmicpc.net/problem/9012

 

9012번: 괄호

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

www.acmicpc.net

문제에서 요구하는건 (와 )가 다 쌍이 맞춰져 있는 케이스는 yes로 출력하고 그렇지 않은건 no로 출력하는 것이다.

스택의 원리를 이용하면 간단하게 풀 수 있는 문제였다.

스택은 문자열이 아닌 정수 스택을 만들면 시간절약이 될까 싶어서 정수형으로 만들어주었다.

괄호의 짝만 다 맞으면 되기 때문에 간단하게 문자열에서 '('를 만나면 스택에 숫자 하나를 집어넣어주고, ')'를 만날 때마다 스택에 있는 숫자를 하나씩 빼주면 된다. 이 때 ')'를 만났는데 스택이 비어있거나 문자열의 끝까지 갔는데도 스택이 비어있지 않으면 no를, 그렇지 않은 경우에는 yes를 출력하도록 해주었다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.*;
import java.util.*;
public class b9012_괄호 {
    public static void main(String args[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int t = sc.nextInt();
        sc.nextLine();
        while(t-->0) {
            int pandan=0//no인지 yes인지 판단해주는 변수.
            Stack<Integer> stack = new Stack<>();
            String s = sc.nextLine();
            for (int i=0; i<s.length(); ++i) {
                char c = s.charAt(i);
                if(c == '(')   //'('를 만났을 때 스택에 1을 집어넣음
                    stack.push(1);
                else {
                    if(stack.isEmpty()) { //')'일 때에는 스택에서 1을 꺼내는데, 이 때 꺼내야할 상황에서 스택이 비어있으면 no로 판단.
                        pandan=1;
                        break;
                    }
                    else 
                        stack.pop();  //')'를 만남과 동시에 스택이 안 비어있을 때에는 스택에서 1을 하나 꺼내준다.
                }
                
            }
            if(!stack.isEmpty() || pandan==1)  //끝까지 갔는데도 스택이 비어있지 않거나 pandan이 1일 때에는 no를 출력.
                bw.write("NO\n");
            else  //그 외의 경우에는 yes를 출력.
                bw.write("YES\n");
            
        }
        bw.flush();
    }
}
 
 
 

'백준 풀이' 카테고리의 다른 글

백준 17299 - 오등큰수  (0) 2021.02.05
백준 1158 - 요세푸스 문제  (0) 2021.01.10
백준 17413 - 단어뒤집기 2  (0) 2021.01.09
백준 10866 - 덱  (0) 2021.01.06
백준 9093 - 단어 뒤집기  (0) 2021.01.04