#include <bits/stdc++.h>
using namespace std;
stack<char> S;
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
string input;
int sum = 0;
cin >> input;
for (int i=0;i<input.size();i++)
{
if (input[i] == '(')
S.push('(');
else
{ // c == ')'
if (input[i-1] == '(')
{ // laser
S.pop();
sum += S.size();
}
else
{ // end of the iron rod
S.pop();
sum++;
}
}
}
cout << sum;
}
열린괄호 : 쇠막대, 스택에 push 하여 겹쳐있는 막대의 개수를 구할 떄 사용
닫힌괄호 : 쇠막대의 끝을 나타낸다.
레이저로 잘려서 남은 쇠막대, 혹은 잘리지 않고 남은 쇠막대를 의미한다.
스택에서 하나 pop 한 뒤, 쇠막대 카운트 +1
열린괄호&닫힌괄호가 연속해 있는 경우 : 레이저이다. 레이저 기준으로 잘린 왼쪽의 막대만큼 카운트 (stack size)