백준 #9012번 괄호 c++

2021. 5. 1. 15:57백준 문제풀이

반응형

 

백준 9012번 괄호 문제이다. 실버4의 문제.

 

스택의 활용 정도 되는 문제이다.  

 

스택의 기본구조인 선입후출의 개념과 stack.empty(), stack.top() 등의 개념을 활용하여 풀 수 있는 문제이다.

 

이 문제의 핵심은 닫는 괄호 ')' 의 짝이 있는가를 찾는 것이다.

 

처음부터 닫는 괄호가 들어오면 당연히 NO를 반환해야 하는것이고

 

닫는 괄호와 여는 괄호의 갯수가 같아도, 짝이 맞지 않으면 해결할 수 없다.

 

아래의 코드를 살펴보자.

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main() {
    int testcase;
    cin >> testcase; // 몇 번 돌지 입력받음
   
    while(testcase--) {
        stack<char> st;
        string s;
        cin >> s; // 괄호들을 문자열로 입력
        
        for(int j = 0; j < s.length(); j++) {
            if(st.empty()) { //스택이 비어있다면 push
                st.push(s[j]);
            }
            else { //스택이 비어있지 않고
                if(st.top() == '(' && s[j] == ')') { //top이 여는 괄호면서 다음 인자가 닫는 괄호면
                    st.pop();//Pop
                }
                else {//그 외의 경우는 모두 push
                    st.push(s[j]);
                }
            }
        }
        if(st.empty()) {
            cout << "YES" << "\n";
        }
        else {
            cout << "NO" << "\n";
        }
    }
}

 

 

 

풀이의 핵심은 stack.top()  == '(' 면서 s[j] == ')'를 확인하는데 있다.

 

그후 pop을 하고 작업이 완료되었음에도 스택에 남는 괄호가 있다면

 

괄호의 짝이 맞지 않는 것이기 때문에 NO를 출력한다.

반응형

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

백준 #2675 문자열 반복 c, python  (0) 2021.05.10
백준 #1158 요세푸스 문제 c++  (0) 2021.05.03
백준 #1406 에디터 c++  (0) 2021.05.02
백준 #9093 단어 뒤집기 C++  (0) 2021.05.01
백준 #10828 스택 c++  (0) 2021.04.30