BOJ : 4949 균형잡힌 세상(C++)

김정욱·2020년 10월 22일
0

Algorithm - 문제

목록 보기
18/249

문제

Code

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    while(1)
    {
        int final_flag = 0;
        int cnt[2] = {0,0};
        stack<char> s;
        string str;
        getline(cin,str);
        if(str == ".")
        {
            break;
        }   

        for(auto a : str)
        {
            switch (a)
            {
                case '(':
                {
                    s.push(a);
                    cnt[0]++;
                    break;
                }
                case ')':
                {
                    int flag=0;
                    do{
                        if(s.empty()) {
                            final_flag = 1;
                            break;
                        }
                        char c = s.top();
                        s.pop();
                        if(c == '('){
                            flag=1;
                            cnt[0]--;
                        }
                    }while(flag != 1);
                    break;
                }
                case '[':
                {
                    s.push(a);
                    cnt[1]++;
                    break;
                }
                case ']':
                {
                    int flag=0;
                    do{
                        if(s.empty()) {
                            final_flag=1;
                            break;
                        }
                        char c = s.top();
                        s.pop();
                        if(c == '['){
                            flag=1;
                            cnt[1]--;
                        }
                    }while(flag != 1);
                    break;
                }
            }
        }
        int sum = cnt[0] + cnt[1];
        if(sum >0 || final_flag == 1){
            cout << "no" << '\n';
        }else
        {
            cout << "yes" << '\n';
        }
    }
}
  • no인 경우는 두가지 이다.
    1) 닫힘 괄호가 들어왔을 때 열린 괄호가 없으면 false
       (열림 괄호가 있을 때 까지 pop)
    2) 열리고 닫히지 않으면 false
       (소괄호, 대괄호 열림 괄호 개수를 세는 배열 생성)
  • 다른 사람들 풀이를 보면 top만 비교해서 짜서 더 짧게 하기도 함
profile
Developer & PhotoGrapher

0개의 댓글