IT 프로그래밍/백준

[C++] 백준 4949번 균형잡힌 세상

기술1 2024. 11. 5. 14:43
반응형

 

 

정답코드

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


int main()
{
	while(1)
	{
		string input;
		getline(cin, input);

		if (input == ".")
		{
			break; //마지막 조건이 .이므로 .이 들어가면 break;
		}

		stack<char> s1;
		bool flag = 0;

		for (int i = 0; i < input.length(); i++)
		{
			char c = input[i];

			if((c == '(') || (c == '['))
			{
				s1.push(c);
			}
			else if(c == ')')
			{
				if(!s1.empty() && s1.top() == '(')
				{
					s1.pop();
				}
				else
				{
					flag = 1;
					break;
				}
			}
			else if(c == ']')
			{
				if(!s1.empty() && s1.top() == '[')
				{
					s1.pop();
				}
				else
				{
					flag = 1;
					break;
				}
			}
		}
		if (flag == 0 && s1.empty())
		{
			cout << "yes" << endl;
		}
		else
			cout << "no" << endl;
	}
	return 0;
}

일단 .이 들어가면 탈출해야 하므로 IF문을 통해 BREAK;가 되도록 만들어줍니다.

 

이후 while문을 통해 getline으로 읽은 문장의 char 하나하나를 분석하면 됩니다. 먼저 ( 나 [가 나올 때는 push를 해주는 것으로 하고 그 다음 조건에서는 top이 ( 이거나 [ 일 때 만약 empty가 비어있지 않다면 pop을 하도록 해주면 됩니다.

 

만약 이 조건과 다를 경우 flag를 1로 바꾸고 (false)그 다음 break;를 통해 빠져나가도록 만들어줍니다. bool flag를 통해 yes와 no를 구분해주는 것입니다.

 

그리고 마지막에 정상적으로 처리가 되었다면 flag 는 0일테고 s1.empty() 즉 s1또한 비어있을 것이기 때문에 이 경우 yes를 하고 아닌 경우는 정상적인 세상이 아니라고 판단을 해서 no를 해주시면 됩니다. 

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[C++] 백준 10799번 쇠막대기  (0) 2024.11.05
[c++] 1874번 스택 수열  (0) 2024.11.05
[C++] 백준 10773 제로  (0) 2024.11.03
[C++] 백준 10828 스택  (0) 2024.11.03
[C++] 백준 5086번 배수와 약수  (0) 2024.11.03