Computer Science/Algorithm Problem

백준] 4949 - 균형잡힌 세상(ACM-ICPC Regionals)

TwinParadox 2018. 6. 15. 19:52
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.

입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.




출력

각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.




소스코드

#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(void)
{
	string tmp;
	while (1)
	{
		getline(cin, tmp);
		if (tmp == ".")
			break;
		int len = tmp.length();
		bool check = true;
		stack<char> st;
		for (int i = 0; i < len; i++)
		{
			if (tmp[i] == '(')
			{
				st.push(tmp[i]);
			}
			else if (tmp[i] == '[')
			{
				st.push(tmp[i]);
			}
			else if (tmp[i] == ')')
			{
				if (st.empty())
				{
					check = false;
					break;
				}
				if (st.top() == '(')
					st.pop();
				else
				{
					check = false;
					break;
				}
			}
			else if (tmp[i] == ']')
			{
				if (st.empty())
				{
					check = false;
					break;
				}
				if (st.top() == '[')
					st.pop();
				else
				{
					check = false;
					break;
				}
			}
		}
		if (check && st.empty())
			cout << "yes\n";
		else
			cout << "no\n";
	}
}




Tip

괄호 짝을 맞춰주는 문제로, 문자열처리와 스택 활용을 해주면 쉽게 문제를 풀 수 있다.

백준 온라인 저지 사이트에 문제가 오역되어 있어서 문제를 이해하는데 애를 먹었다.



728x90