https://www.acmicpc.net/problem/9012
제출 코드
#include <iostream>
#include <stack>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
stack<char> ps;
string str;
cin >> str;
for (int j = 0; j < str.length(); j++)
{
if (ps.empty())
{
ps.push(str[j]);
continue;
}
if (str[j] == '(')
ps.push(str[j]);
else if (str[j] == ')' && ps.top() == '(')
ps.pop();
else
break;
}
if (ps.empty()) cout << "YES" << '\n';
else cout << "NO" << '\n';
}
}
vps가 될 수 없는 조건은
1. 앞에 ' ( ' 기호가 없는데 ' ) ' 기호가 나오는 경우
2. 마지막 문자까지 확인했는데 짝지어지지 않은 괄호 기호가 남아있는 경우
이므로 이번 순서의 괄호 기호가 ' ( '인 경우 그냥 push해주고, ' ) '인 경우에는 현재 top에 있는 괄호 기호가 ' ( '인지 확인해서 top을 pop 해준다
그리고 이번 순서의 괄호 기호가 ' ) '인데 앞에 있는 괄호 기호가 ' ( '가 아닌 경우 그냥 중간에 나가준다
(이 경우 ps가 empty가 아니므로 자동적으로 NO를 출력)
만약 for문을 끝까지 다 돈 경우에도, 짝지어지지 않은 ' ( ' 기호가 남아있을 수 있기 때문에 empty 여부를 체크해주고 YES/NO를 출력해주었다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 10828] 스택 (0) | 2025.01.08 |
---|---|
[C++][백준 10816] 숫자 카드2 (0) | 2025.01.07 |
[C++][백준 2164] 카드2 (0) | 2025.01.07 |
[C++][백준 1920] 수 찾기 (0) | 2025.01.07 |
[C++][백준 1018] 체스판 다시 칠하기 (0) | 2025.01.07 |