boj 4889 c++ 안정적인 문자열

백준 4889 cpp 안정적인 문자열

 

그리디 + 스택 문제.

짝수 개만 들어오므로, {} 쌍을 모두 지우고 나면 짝수 개의 }} 형태 또는 }{ 만 남는다.

이 때, }} or {{ 의 경우 하나만 뒤집어 주면 되므로 출력할 값에 1을 더하고,

}{ 의 경우 두 개 다 뒤집어 주어야 하므로 출력할 값에 2를 더한다.

또한 출력할 때 그냥 숫자만 출력하는게 아니라 n. answer 의 형식을 띄어야 한다는 것에 유의하자.

 

#include <bits/stdc++.h>
using namespace std;

string line;
stack<char> S;

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

    int ansNum = 1; // 출력을 자세히 보면 `1. 정답`의 형태. 
    while (true)
    {
        cin >> line;
        int ans = 0;
        for (int i = 0; i < line.size(); i++)
        {
            char c = line[i];
            if (c == '{')
            {
                S.push(c);
            }
            else if (c == '}')
            {
                if (S.empty() || S.top() != '{')
                {
                    S.push(c);
                }
                else // S.top() == '{'
                {
                    S.pop();
                }
            }
            else // c == '-'
            {
                return 0;
            }
        }
        while (!S.empty())
        {
            char t = S.top();
            S.pop();
            if (S.top() != t)
            {
                ans += 2;
            }
            else // S.top() == t. '{' == '{'
            {
                ans += 1;
            }
            S.pop();
        }
        cout << ansNum++ << ". " << ans << '\n';
    }
}

 

'Algorithm' 카테고리의 다른 글

boj 17478 재귀함수가 뭔가요? c++  (0) 2020.10.16
boj 1012 c++ 유기농 배추  (0) 2020.09.07
boj 9012 c++ 괄호  (0) 2020.09.03
boj 2504 c++ 괄호의 값  (0) 2020.09.02
boj 10799 c++ 쇠막대기  (0) 2020.08.31
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom