알고리즘/백준(BAEKJOON)

[자바]스택 /9012번 : 괄호 [백준]

jojelly 2022. 1. 10. 04:17
반응형

스택을 이용하여 푸는문제 (와 )로만 구성되어있으며 균형잡힌 올바른 괄호식인지 구분하는 문제이다.

() YES

()(()) YES

()(())() YES

)() NO

()) NO

()((())))) NO

()(()))((0 NO

이처럼 ()가 균형있게 들어가 있어야 한다.

 

Stack에 (경우 push

)경우 pop

스택이 비어있는데 )가 들어가는 경우 균형이 잡히지 않기 때문에 바로 NO가 된다. 

이를 이용해 문제를 풀어보자.

 

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        while (N > 0) { String data = br.readLine();
            Stack<Character> stack = new Stack<>();
            boolean finish = false;
            for (int i = 0;i < data.length(); i++)
            {
                char c = data.charAt(i);
                if (c == '(') { stack.push(c);
                } else {
                    if (stack.empty()) {
                        finish = true;// 빈 스택에 )가 들어가게 되는경우 NO가 된다.
                        break;
                    } else {
                        stack.pop();
                    } } }
            System.out.println(stack.empty());
            if (!stack.empty() || finish) {//스택이 비어있지 않거나,(없이 )가 빈 스택에 들어가 finsh가 true인 경우
                System.out.println("NO");
            } else{
                System.out.println("YES");
            } N--;
        }
 
    }
}
 
cs

 

반응형