#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로 풀었따.
[C++ 코딩테스트 자료구조 알고리즘] 01-1 배열, 연결리스트(linked list), std::array (5) | 2023.04.02 |
---|---|
[백준]BOJ_단어 공부_ 1157번 브론즈 1 - C++ (아스키코드, string) (2) | 2022.11.03 |
[백준]BOJ_실버 1 _1629 곱셈_C++ 분할정복/재귀 (1) | 2022.10.07 |
[C++]cout<<fixed, precision() / C++소수점 자릿수 정하기 (6) | 2022.09.30 |
[백준]BOJ_브론즈1_1546번 평균 -C++ (0) | 2022.09.30 |
댓글 영역