본문으로 바로가기

[백준 9012] 괄호 문제

category PS/백준 문제풀이 2018. 3. 28. 23:00
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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


올바른 괄호 문자열 쌍들이 있는지 아닌지를 파악하기 위한 문제이다.

괄호 문자열은 '('와 ')'가 한쌍이며 올바른 쌍들이 있는지를 파악하기 위해서는 '('와 ')'의 개수가 같아야만 한다.


쌍을 쉽게 파악하기 위해서 스택을 이용한다.

'('가 들어오면 스택에 push를. ')'가 들어오면 스택에서 pop을 하기로 하면 어느정도 쉽게 파악이 가능하다.


Input의 길이만큼 반복문을 돌리며 한 글자 씩 파악을 하는데 조건은 다음과 같다.

'('이면 스택에 push. ')'이면 pop을 해야하나 pop전에 스택이 비어있다면 fail.


Input의 길이만큼 반복문을 다 검사를 했지만 스택에 여전히 자료가 존재한다면 fail.

그 외에 반복문을 다 검사하고 스택이 비어있다면 success.  



소스 코드는 다음과 같다.


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
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <string>
#include <queue>
 
using namespace std;
 
bool check(string str) {
    int i = 0;
    queue<char> q;
 
    while (i < str.length()) {
        if (str[i] == '(')
            q.push('(');
        else {
            if (q.empty())
                return false;
            q.pop();
        }
        i++;
    }
    if (!q.empty())
        return false;
    return true;
}
 
int main() {
 
    int N;
    string str;
 
    cin >> N;
 
    while (N > 0) {
 
        cin >> str;
 
        if (check(str))
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
        N--;
    }
 
    return 0;
}
cs


'PS > 백준 문제풀이' 카테고리의 다른 글

[백준 10808] 알파벳 개수 문제  (0) 2018.03.29
[백준 1158] 조세퍼스 순열 문제  (0) 2018.03.28
[백준 1406] 에디터 문제  (3) 2018.03.28
[백준 10799] 쇠막대기 문제  (0) 2018.03.28
[백준] 별찍기 문제  (0) 2018.03.28