
- '(' 일때는 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; }
- 증가 경우를 잘못 파악해서 돌아서 코딩함; 이런ㅎㅎ;