#include <stdio.h>
#include <string.h>
int main(){
int a[100000], b[100000], h[100000], k[100000], x[100000]=0, y[100000]=0, w[100000], q[100000]=1, u[100000]=1, c, d, e,f ,g=0, i, t=0, r=0;
char z[100000];
gets(z);
c=strlen(z); /*c는 문자갯수*/
for(e=0;e<c;e++){
for(d=0;d<=e;d++){
if(z[d]=='(') a[e]++;
/*a[e]는 z[0]부터 z[e]까지 들어있는 '('의 갯수*/
b[e]=e+1-a[e];
}
/*b[e]는 z[0]부터 z[e]까지 들어있는 ')'의 갯수*/
for(d=(e+1);d<=(c-1);d++){
if(z[d]=='(') h[e]++;
}
/*h[e]는 z[e+1]부터 z[c-1]까지 들어있는 '('의 갯수*/
k[e]=c-e-1-h[e]; /*k[e]는 z[e+1]부터 z[c-1]까지 들어있는 ')'의 갯수*/
}
for(e=0;e<c;e++){
if(z[e]=='('){
for(p=0;p<e;p++){
if(a[p]-b[p]>=0&&k[p]-h[p]+2>=0&&a[p]-b[p]==k[p]-h[p]+2){
q[p]=0;
}
}
for(p=e;p<c;p++){
if(a[p]-b[p]-2>=0&&k[p]-h[p]>=0&&a[p]-b[p]-2==k[p]-h[p]){
q[p]=0;
}
}
for(p=0;p<c;p++){
r=r+q[p];
}
if(r==0) x[e]=1;
}
}
/*어느 e에대해 그에 위치한 괄호가 (일때 그걸 역으로 바꿨을때 그게 완전한문양이면 x[e]변수에 1을 저장*/
for(e=0;e<c;e++){
if(z[e]==')'){
for(p=0;p<e;p++){
if(a[p]-b[p]>=0&&k[p]-h[p]-2>=0&&a[p]-b[p]==k[p]-h[p]-2){
u[p]=0;
}
}
for(p=e;p<c;p++){
if(a[p]-b[p]+2>=0&&k[p]-h[p]>=0&&a[p]-b[p]+2==k[p]-h[p]){
u[p]=0;
}
}
for(p=0;p<c;p++){
t=t+u[p];
}
if(t==0) y[e]=1;
}
} /*어느 e에대해 그에 위치한 괄호가 )일때 그걸 역으로 바꿨을때 그게 완전한문양이면 y[e]변수에 1을 저장*/
for(e=0;e<c;e++){
w[e]=x[e]+y[e];
}
for(e=0;e<c;e++){
g=g+w[e];
}
printf("%d",g);
return 0;
}
어디가 틀린건지 아무리 봐도 안보이네;;
아 내눈
니년 대가리
참 씹죶스럽게도 짠다
제대로 안봤다만, 배열을 저따위로 함수 내에 선언하면 1MB Stack 사이즈 사뿐히 넘지. 전역으로 빼라. 동적할당하든.
프로젝트 옵션에서 stack 크기 조정하는건 비추한다.