본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 4949번 : 균형잡힌 세상 답

반응형

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

 

4949번: 균형잡힌 세상

문제 세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다. 정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단

www.acmicpc.net

stack을 사용하여 문자열을 다뤄보는 구현문제였습니다.

 

Code:

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

string getBracketStr(string sentance){
    string tmp="";
    for(int i = 0; i<sentance.size(); i++){
        if(sentance[i]=='[' || sentance[i]==']' ||
        sentance[i]=='(' || sentance[i]==')')
        tmp+=sentance[i];
    }
    return tmp;
}

string isBalanced(string bracketStr){
    stack <char> s;
    for(int i = 0; i<bracketStr.size(); i++){
        if(bracketStr[i]=='(' || bracketStr[i]=='[') s.push(bracketStr[i]);
        else{
            if(!s.size()) return "no\n";
            if(s.top()=='(' && bracketStr[i]==')' ||
               s.top()=='[' && bracketStr[i]==']'
            ) s.pop(); 
            else return "no\n";
        }
    }
    if(!s.size()) return "yes\n";
    return "no\n";
}

int main(){
    while(1){
        string sentance;
        string bracketStr;
        getline(cin,sentance);
        if(sentance==".") break;
        bracketStr = getBracketStr(sentance);
        cout << isBalanced(bracketStr);
    }
}