출처: https://www.acmicpc.net/problem/9012


풀이

저번에풀었던 10828번 문제 (https://jow1025.tistory.com/16)와 마찬가지로 스택을 이용한 괄호검사 문제로써 스택의 개념을 공부한 후 복습하기에 좋은 문제인 것같습니다. 이번문제는 c++의 스택stl을 이용하여 풀었습니다.

주의할점은 테스트케이스n을 입력후에 개행을 처리해주지않으면 n만입력해도 yes가출력됩니다. 

cin.ignore()로 해결하였고, 스택에 넣다가 입력할 문자가 오른괄호일 때  스택이 비어있지않고 스택의 최상단에 위치한 문자가 왼괄호 일때만 처리해주고 스택이 비어있을 시 즉시 빠져나와 NO를 출력하게합니다.


코드

#include<iostream>
#include<stack>
#include<string>
using namespace std;

int main()
{
	string s;
	int n;
	cin >> n;
	cin.ignore();
	while(n--)
	{
		stack<char>st;
		getline(cin, s);
	
		bool flag = true;
		if (s[0] == '.' && s.length() == 1)
			break;
		for (int i = 0; i < s.length(); i++)
		{
			if (s[i] == '(')
				st.push('(');
			else if (s[i] == '[')
				st.push('[');
			else if (s[i] == ']')
			{
				if (st.empty() == 0 && st.top() == '[')
					st.pop();
				else
				{
					flag = false;
					break;
				}
			}
			else if (s[i] == ')')
			{
				if (st.empty() == 0 && st.top() == '(')
					st.pop();
				else
				{
					flag = false;
					break;
				}
			}
		}
		if (flag == true && st.empty())
			cout << "YES" << '\n';
		else
			cout << "NO" << '\n';
	}
}


결과


'문제풀이(BOJ) > 스택' 카테고리의 다른 글

[백준 11899] 괄호 끼워넣기  (0) 2020.01.08
[백준 3986] 좋은 단어  (0) 2019.12.08
[백준 10828] 스택  (0) 2019.12.03

+ Recent posts