본문 바로가기
백준

[백준 9012] 괄호, C++

by 황인태(intaehwang) 2020. 1. 8.
반응형

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

 

9012번: 괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc

www.acmicpc.net

 본 문제는 2012 ICPC Daejeon Nationalwide Internet Competition G번 문제다. stack을 이용하면 쉽게 풀린다. 문자열 전체를 입력받을 때, ')' 입력이 들어왔을 때, stack의 top이 '('일 경우에만 pop을 하고 아닌 경우 모두 push를 한다. 문자열 전체 입력이 끝났을 때, stack의 empty 여부를 확인하면 된다.

  1. ')' 입력 시, top가 '(' 이면 pop
  2. 아니면 push
  3. 문자열 전체 입력이 끝남
  4. stack이 empty일 때 YES, 아닐 때 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
#include <iostream>
#include <stack>
#include <string>
 
using namespace std;
 
int main() {
    int t;
    cin >> t;
    while (t--) {
        string s;
        cin >> s;
        stack<char> st;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == ')') {
                if (!st.empty() && st.top() == '(')
                    st.pop();
                else st.push(s[i]);
            }
            else st.push(s[i]);
        }
        if (st.empty()) cout << "YES" << "\n";
        else cout << "NO" << "\n";
    }
    return 0;
}
cs
반응형

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

[백준 1406] 에디터, C++  (0) 2020.01.08
[백준 1874] 스택 수열, C++  (0) 2020.01.08
[백준 9093] 단어 뒤집기, C++  (0) 2020.01.08
[백준 10828] 스택, C++  (0) 2020.01.08
[백준] 7569 - 토마토, C++  (0) 2020.01.08
Buy me a coffeeBuy me a coffee

댓글