매일 조금씩

백준 4949번: 균형잡힌 세상 본문

알고리즘

백준 4949번: 균형잡힌 세상

mezo 2020. 4. 5. 19:24
728x90
반응형

 

스택관련 문제로

반례를 잘 찾아야하는 문제다.

 

 

 

 

 

< 주의 사항 >

  1. 열린 괄호와 닫힌 괄호가 만나게 되면 열린괄호를 pop한다.
  2. '(' 다음에는 ')', '[' 다음에는 ']' 가 와야한다. 예를 들어 "( [ ) ]"는 성립 될 수 없다.
  3. 닫는 괄호가 들어올 때 비어있거나, top이 짝이 맞는 열린괄호가 아닐 경우 불균형이다.
  4. 열린 괄호만 남아있게 되어도 불균형이다. 
  5. 괄호가 아무것도 입력안되면 균형으로 간주한다.

 

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

string str;

int main(void) {
	ios_base::sync_with_stdio(0);
	cin.tie(0);	//cin 실행속도 향상

	while (1) {

		getline(cin, str);

		if (str == ".")
			break;

		stack<string> s;
		bool balance = true;

		for (int i = 0; i < str.length(); i++) {
			

			if (str[i] == '(')
				s.push("(");
			else if (str[i] == ')') {
				if (!s.empty()) {
					if(s.top() == "(")
						s.pop();
					else {
						balance = false;
						break;
					}
				}
				else {
					balance = false;
					break;
				}
			}

			else if (str[i] == '[')
				s.push("[");
			else if (str[i] == ']') {
				if (!s.empty()) {
					if(s.top() == "[")
						s.pop();
					else {
						balance = false;
						break;
					}
				}
				else {
					balance = false;
					break;
				}
			}

		}

		if (!balance || !s.empty())
			cout << "no" << "\n";
		else
			cout << "yes" << "\n";
	}
	return 0;
}
728x90
반응형

'알고리즘' 카테고리의 다른 글

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