문제 https://www.acmicpc.net/problem/9012
풀이
입력받은 문자열을 돌다가
1) 여는 괄호를 만나면 stack에 push한다.
2) stack이 비어있지 않은 상태에서 닫는 괄호를 만나면 pop 한다.
3) stack이 비어있는 상태에서 닫는 괄호를 만나면 false
입력받은 문자열을 다 돈 후에도 false 가 되지 않고 stack이 비어있다면 true를 반환한다.
코드
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool vps(string ps)
{
stack<char> s;
bool flag = true;
for(int i=0; i<ps.length(); i++)
{
if(ps[i]=='(')
{
s.push(ps[i]);
}
else if(!s.empty() && ps[i]==')')
{
s.pop();
}
else if(s.empty() && ps[i] ==')')
{
flag = false;
break;
}
}
if(flag && s.empty()) return true;
else return false;
}
int main()
{
int n;
cin>>n;
string str;
for(int i=0; i<n; i++)
{
cin>>str;
if(vps(str)) cout<<"YES"<<'\n';
else cout<<"NO"<<'\n';
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
백준 1065 - 한수 (0) | 2022.03.19 |
---|---|
백준 1158 - 요세푸스 문제(C++) (0) | 2022.03.12 |
백준 4949 - 균형잡힌 세상 (0) | 2022.03.03 |
백준 10816 - 숫자 카드 2 (0) | 2022.02.23 |
백준 1920 - 수 찾기 (0) | 2022.02.19 |