IT 프로그래밍/백준

[C++] 백준 9012번 괄호

기술1 2024. 11. 3. 15:46
반응형

코딩에서 어쨌든 한번은 접해봤을 스택을 다루는 기본적인 문제입니다.

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