본문 바로가기

Algorithm

1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD&categoryId=AV14eWb6AAkCFAYD&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

stack으로 간단히 풀 수 있는 문제.

 

 


#include<iostream>
#include<string>
#include<stack>

using namespace std;
string str;
int main(int argc, char** argv)
{
	int test_case;
	/*
	   여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
	*/
	for (test_case = 1; test_case <= 10; ++test_case)
	{
		int N;
		cin >> N;
		cin >> str;
		stack<char> sta;
		bool flag = true;

		for (int i = 0; i < str.size(); i++)
		{
			if (sta.empty())
			{
				sta.push(str[i]);
			}
			else
			{
				if (str[i] == '(' || str[i] == '{' || str[i] == '<' || str[i] == '[')
				{
					sta.push(str[i]);
				}
				else if(str[i] == ')')
				{
					if (sta.top() == '(')
					{
						sta.pop();
					}
					else
					{
						flag = false;
						break;
					}
				}
				else if (str[i] == '}')
				{
					if (sta.top() == '{')
					{
						sta.pop();
					}
					else
					{
						flag = false;
						break;
					}
				}
				else if (str[i] == '>')
				{
					if (sta.top() == '<')
					{
						sta.pop();
					}
					else
					{
						flag = false;
						break;
					}
				}
				else if (str[i] == ']')
				{
					if (sta.top() == '[')
					{
						sta.pop();
					}
					else
					{
						flag = false;
						break;
					}
				}
			}
		}
		
		if (flag && sta.empty())
		{
			cout << "#" << test_case << " " << 1 << endl;
		}
		else
		{
			cout << "#" << test_case << " " << 0 << endl;
		}


	}
	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형