문제
문제에 대한 링크는 여기를 클릭해주세요.
문제 설명
괄호 문자열(PS)은 '('와 ')'로만 이루어진 문자열이고, 그 중에서 올바른 괄호 문자열(VPS)은 '('와 ')'가 한 쌍을 이룬 괄호 문자열입니다. 올바른 괄호 문자열이면 "YES"를 아니면 "NO"를 출력해야 합니다.
풀이
스택(stack)을 활용하기로 했습니다. '('는 push를 하고 ')'를 만날 시 pop을 합니다. '('와 ')'는 한 쌍을 이루니 올바른 괄호 문자열(VPS)이면 스택은 비어있어야 합니다.
소스 코드
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool check(const string &str);
int main()
{
int T;
cin >> T;
string str;
for (int i = 0; i < T; i++)
{
cin >> str;
if(check(str))
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
bool check(const string &str)
{
stack<char> s;
int len = str.length();
for (int i = 0; i < len; i++)
{
if(str[i] == '(')
s.push(str[i]);
else
{
if(s.empty())
return false;
s.pop();
}
}
return s.empty();
}
주의 사항
empty메서드로 체크를 하고 pop을 진행해야합니다. 체크를 안할 시 진행이 안되고 종료가 되는 오류가 발생합니다.
'알고리즘 Algorithm > 백준 (BaekJoon)' 카테고리의 다른 글
백준 17298 : 오큰수 [C++] (0) | 2021.02.13 |
---|---|
백준 1874 : 스택 수열 [C++] (0) | 2021.02.12 |
백준 4949 : 균형잡힌 세상 [C++] (0) | 2021.02.12 |
백준 10773 : 제로 [C++] (0) | 2021.02.11 |
백준 10828 : 스택 [C++] (0) | 2021.02.11 |