상세 컨텐츠

본문 제목

[백준]BOJ_실버4_9012번 괄호 - C++ 스택 STL사용

알고리즘/C++

by 셉인 2022. 10. 7. 17:55

본문

728x90

9012번: 괄호 (acmicpc.net)

 

9012번: 괄호

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

www.acmicpc.net

#include <iostream>
#include <string>
#include <stack>
using namespace std;

int main()
{
   ios_base::sync_with_stdio(false); 
	cin.tie(nullptr); 
	cout.tie(nullptr);
    int n;
    cin >> n;
    for(int i=0; i<n; i++)
    {
        string s;
        stack<char> stack;
        cin >> s;
        for (int i = 0; i <= s.length(); i++)
        {
            if (s[i] == '(')
            {
                stack.push(s[i]);
            }
            else if (s[i] == ')')
            {
                if (!stack.empty()) //안비워져 있으면 맨 위에있는 ) 빼주기
                {
                    stack.pop();
                }
                else
                {
                    cout << "NO" << endl; // 비워져 있으면 (와 개수가 다르니깐 NO출력
                    break;
                }
            }
            else if (s[i] == NULL)
            {
                if (stack.empty()) 
                {
                    cout << "YES" << endl;
                    break;
                }
                else
                {
                    cout << "NO" << endl;
                }
            }
        }
    }
    return 0;
}

<코드해석>

SCCC에서 스택에 대해 배워서 푼 문제이다.

1.<stack> 이라는 헤더파일을 선언해 STL을 이용해줄것이다.

2. stack에게 char => 문자열 쓸거야 하고 알려준다. 

3. ( (열린괄호)가 나올시 stack에 넣어준다 만약 ) (닫힌 괄호)가 나올시 2가지 경우로 나눠서 판단해 줘야한다.

- stack이 비어져 있지 않으면 맨위에있는 것 pop해준다. => )이 나오면 (도 없애기

또는 비워져 있으면 NO를 출력해준다. => 조건에 맞지 않으니

4. 또는 s[i]가끝나면으면 stack이 비어있는지 확인ㅇ해준다.

-> 비어있으면 (과 )의 개수가 맞으니YES를 cout해서 출력해준다.

-> 만약 비어있지 않으면 개수가 맞지 않으니 NO를 출력해준다.

 

스택을 STL로 풀었따.

728x90

관련글 더보기

댓글 영역