본문 바로가기

Algorithm/BAEKJOON

[BOJ] 4949번 균형잡힌 세상 (C++)

728x90
반응형

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

 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 

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

int main() {
	while(true){
		string str;
		getline(cin, str);
		if(str == ".") break;
		
		stack<char> st;
		string ans = "yes";
	
		for(int i = 0; i < str.length(); i++){
			if(str[i] == '(') st.push('(');
			else if(str[i] == '[') st.push('[');
			else if(str[i] == ')'){
				if(st.empty() || st.top() == '['){
					ans = "no";
					break;
				} else{
					st.pop();
				}
			}
			else if(str[i] == ']'){
				if(st.empty() || st.top() == '('){
					ans = "no";
					break;
				} else{
					st.pop();
				}
			}
		}
		if(!st.empty()) ans = "no";
		cout << ans << endl;
	}
	return 0;
}

 

"짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다."는 조건이 있으므로 여는 괄호가 나올 때 스택에 넣고, 닫는 괄호가 나올 때 스택의 top에 있는 괄호의 종류를 확인해야 한다.

 

스택 문제를 풀 때마다 까먹는건데 마지막에 스택에 남아있는 괄호가 있는지도 꼭 확인하기!!

728x90
반응형