반응형
코딩에서 어쨌든 한번은 접해봤을 스택을 다루는 기본적인 문제입니다.
stack을 이용해서 풀면 되는 것이고 스택에 대한 기본적인 개념이 있어야 풀 수 있는 문제입니다. stack 개념과 empty의 활용, push와 pop이 스택에서 어떤 역할을 하는지에 대한 개념이 있다면 어렵지 않게 풀 수 있습니다.
정답코드
#include <iostream>
#include <stack>
using namespace std;
string checkVPS(string input)
{
stack<char> ps;
for (int i = 0; i < input.size(); i++)
{
if (input[i] == '(')
{
ps.push('(');
}
else
{
if (ps.empty())
return "NO";
ps.pop();
}
}
if (ps.empty())
return "YES";
else
return "NO";
}
int main()
{
int n;
string ans;
cin >> n;
for(int i=0; i<n; i++)
{
cin >> ans;
cout << checkVPS(ans) << endl;
}
return 0;
}
문제를 읽으면 괄호를 어떻게 다뤄야 하는지 알 수 있습니다.
먼저 스택을 이용하기 위해 stack<char> ps; 라는 스택을 하나 만들어줍니다. 그 다음 괄호 만큼 읽어와야하니 for문을 통해 input의 size만큼 읽도록 반복해준뒤에 해야하는 작업은 반드시 괄호는 () 이런 식으로 나와야 합니다. 괄호가 쌍이 다를 경우 틀린 경우이므로
( 이것이 입력되었을 때 이후 ) 이것이 나왔을 때 pop을 할 (가 없다면 이것은 NO가 되는 것입니다. 이게 이해가 가지 않는다면 스택의 개념을 다시 공부하셔야 합니다.
그렇게 if와 else문을 조금 잘 조합하면 됩니다. 그리고 for문을 다 돌렸을 때는 스택에 남은 것이 없어야 합니다. 남은 것이 있는 경우 VPS가 아니기에 NO가 출력되도록 합니다.
반응형
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[C++] 백준 10828 스택 (0) | 2024.11.03 |
---|---|
[C++] 백준 5086번 배수와 약수 (0) | 2024.11.03 |
[백준] 1032 명령 프롬프트 c++ (0) | 2024.10.08 |
[c++] 5073번 삼각형과 세 변 (0) | 2024.06.01 |
[c++] 10101번 삼걱형 외우기 (0) | 2024.06.01 |