알고리즘/C++
[백준]BOJ_실버4_9012번 괄호 - C++ 스택 STL사용
셉인
2022. 10. 7. 17:55
728x90
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