10799번 쇠막대기

10799번 쇠막대기 백준 알고리즘 문제

이 문제는 스택을 이해하기 위한 문제이다. 직접 써보면서 문제의 원리를 파악하고 코드로 옮기면 되는 문제이다. 다만 스스로 피드백을 하자면 원리를 찾는 것을 계속 훈련해서 좀 더 복잡한 문제도 빠르게 해답을 캐치해내는 연습을 해야겠다는 것이다.

// 쇠막대기
#include <iostream>
#include <string>
#include <stack>
using namespace std;
string str;
stack<char> st;
int main()
{
    cin >> str;
    // 1이면 방금 전에 ) 가 나왔던 것.
    int temp = 0;
    int barN = 0;
    int res = 0;
    for (int i = 0; i < str.length(); i++)
    {
        char t = str[i];
        if (t == '(')
        {
            temp = 0;
            barN++;
            st.push('(');
        }
        else
        {
            // 막대 하나를 빼야한다.
            if (temp == 1)
            {
                st.pop();
                res++;
            }
            else
            {
                st.pop();
                res += st.size(); // bar 갯수만큼 추가된다.
                temp = 1;
            }
        }
    }
    cout << res << endl;
}