백준 c++/(1-1)백준 c++ 알고리즘 기초

백준 9012 c++ 괄호

현구구 2022. 7. 4. 12:12

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

 

9012번: 괄호

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

www.acmicpc.net

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
#include <iostream>
#include <string>
#include <stack>
using namespace std;
 
 
int main() {
    string s;
    int a;
    cin >> a;//a만큼 문자열 입력 받는다
    while (a--)
    {
        stack<char> cstack;
        stack<char> sstack;
        cin >> s;
        for (int i = 0; i < s.size(); i++)
        {
            if (s[i] == '(')//입력받은 s 에서 (일 경우 cstack에 push
            {
                cstack.push('(');
            }
            if (s[i] == ')')//입력받은 s 에서 )일 경우
            {
                if (cstack.empty())//(를 넣는 cstack이 비었다면 sstack에 push
                {
                    sstack.push(')');
                }
                else//cstack 안 비었다면 cstack pop
                {
                    cstack.pop();
                }
            }
            
        }
        if (cstack.size() != 0||sstack.size()!=0)//만약 cstack, sstack 둘 다 남은 원소가 있다면 No
        {
            cout << "NO" << endl;
        }
        else
        {
            cout << "YES" << endl;
        }
    }
}
cs

위 코드대로 라면 만약 첫번째 예제의 경우 sstack에 )가 하나 남았기 때문에 No가 출력된다

(가 입력됐을 때 cstack 에 push가 되고 )가 입력 됐을 때 cstack이 pop되는 박자가 맞을 때 정상적인 괄호고 YES가 출력된다.

'백준 c++ > (1-1)백준 c++ 알고리즘 기초' 카테고리의 다른 글

백준 1406 c++ 에디터  (0) 2022.07.04
백준 c++ 1874 스택 수열  (0) 2022.07.04
백준 9093 c++ 단어 뒤집기  (0) 2022.07.04
백준 10828 c++ 스택  (0) 2022.07.04
백준 17299 오등큰수 c++  (0) 2022.02.20