이 문제는 스택을 이해하기 위한 문제이다. 직접 써보면서 문제의 원리를 파악하고 코드로 옮기면 되는 문제이다. 다만 스스로 피드백을 하자면 원리를 찾는 것을 계속 훈련해서 좀 더 복잡한 문제도 빠르게 해답을 캐치해내는 연습을 해야겠다는 것이다.
// 쇠막대기
#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;
}