- '(' 일때는 stack에 push
- ')' 일때
1) 바로 직전이 '(' --> (레이저임) +stack.size()
2) 바로 직전이 '('가 아니면 --> +1
[ 최적 코드 ]
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void)
{
int sum = 0;
stack<char> S;
string s;
cin >> s;
for(int i=0;i<s.size();i++)
{
if (s[i] == '(')
S.push('(');
else
{
S.pop();
if (s[i - 1] == '(')
{
sum += S.size();
}
else
{
sum += 1;
}
}
}
cout << sum;
}
[ 다르게 푼 코드 ]
#include <iostream>
#include <stack>
using namespace std;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
stack<char> s;
string str;
int cur_cnt=0, tot_cnt=0,flag=0;
cin >> str;
for(int i=0; i< str.length();i++)
{
char a = str[i];
if( a == '('){
cur_cnt++;
if(s.empty()){
flag=1;
}else{
flag=0;
}
s.push(a);
}else if( a==')'){
cur_cnt--;
if(s.size() == 1){
if(flag == 0){
tot_cnt ++;
}else{
flag=0;
}
}
else{
if(str[i-1] == ')')
tot_cnt++;
else
tot_cnt += cur_cnt;
}
s.pop();
}
}
cout << tot_cnt;
}
- 증가 경우를 잘못 파악해서 돌아서 코딩함; 이런ㅎㅎ;