코딩/문제

백준 4949 균형잡힌 세상

Hun die 2022. 6. 28. 10:19

https://www.acmicpc.net/problem/4949

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 

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

int main()
{
	while (true)
	{
		string str;
		getline(cin, str);
		stack<char>a;
		if (str[0] == '.') break;

		for (int i = 0; i < str.length() - 1; i++)
		{
			if (str[i] == '(')
			{
				a.push('(');
			}
			if (str[i] == '[') 
			{
				a.push('['); 
			}
			if (str[i] == ']')
			{
				if (!a.empty() && a.top() == '[')
				{
					a.pop();
				}
				else 
				{
					printf("no\n"); break;
				}
			}
			if (str[i] == ')') 
			{
				if (!a.empty() && a.top() == '(')
				{
					a.pop();
				}
				else 
				{
					printf("no\n"); break;
				}
			}
			if (a.empty() && i == str.length() - 2)
			{
				printf("yes\n");
			}
			else if (!a.empty() && i == str.length() - 2)
			{
				printf("no\n");
			}
		}
	}
}

 

getline으로 공백을 포함한 값을 입력 받아 값을 처리했으며 ( [ 가 나오면 저장했다가 [ 뒤에 ) 가 나오거나 (뒤에 ] 가 나오면 실패 처리했다.

 

+

처음에 getline없이 string만으로 처리하려고 하니 예시의 마지막에 ' .' 과 '.' 의 구분하지 못해 무진장 틀리다가 getline을 쓰자마자 맞췄다.

매우 화남

 

 

'코딩 > 문제' 카테고리의 다른 글

백준 18258 큐2  (0) 2022.06.28
백준 1874 스택 수열  (0) 2022.06.28
백준 9012 괄호  (0) 2022.06.28
백준 10773 제로  (0) 2022.06.28
백준 10828 스택  (0) 2022.06.28