BOJ : 4889 안정적인 문자열 (C++)

김정욱·2020년 10월 23일
0

Algorithm - 문제

목록 보기
21/249

문제

Code

#include <iostream>
#include <stack>

using namespace std;

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

    int number = 1;
    while(1)
    {
        stack<char> s;
        string str;
        cin >> str;
        int cnt=0;

        if(str[0] == '-')
            break;
        for(int i=0;i<str.length();i++)
        {
            char a = str[i];
            if(a == '}')
            {
                if(s.empty())
                {
                    s.push('{');
                    cnt++;
                }else{
                    s.pop();
                }
            }else if(a == '{')
            {
                s.push(a);
            }
        }
        if(!s.empty()) cnt += s.size()/2;
        cout << number++ << ". "<< cnt <<'\n';
    }
}
  • '}' 일 때 stack이 비어있으면 cnt++ 후 '{'로 stack에 삽입!
  • '{{{{{{' 처럼 '{'이 연속으로 있을 경우 하나만 '{'개수의 절반만 바뀌면 올바른 괄호가 된다. --> cnt += s.size()/2;
  • 입력에서 '-'가 1개 이상 있다고해서 str.find()로 찾아서 했는데 이게 오류의 원인이었음; 어휴 그냥 str[0] != '-' 하면될것을;
profile
Developer & PhotoGrapher

0개의 댓글