Star in Parentheses

질문 A: Star in Parentheses
시간 제한: 1 Sec  메모리 제한: 128 MB
제목 설명
You are given a string S, which is balanced parentheses with a star symbol '*' inserted. Any balanced parentheses can be constructed using the following rules: An empty string is balanced. Concatenation of two balanced parentheses is balanced. If T is balanced parentheses, concatenation of '(', T, and ')' in this order is balanced. For example, '()()' and '(()())' are balanced parentheses. ')(' and ')()(()' are not balanced parentheses. Your task is to count how many matching pairs of parentheses surround the star. Let Si be the i-th character of a string S. The pair of Sl and Sr (l
 
입력
The input consists of a single test case formatted as follows. S S is balanced parentheses with exactly one '*' inserted somewhere. The length of S is between 1 and 100, inclusive.
 
출력
Print the answer in one line.
 
샘플 입력
샘플 데이터 복사
((*)())

샘플 출력
2

제목: 몇 개의 효과 적 인 괄호 가 별 표를 싸 줄 수 있 습 니까? 가 까 운 괄호 와 없 앨 수 있다 면 효과 적 이지 않 습 니 다.
별표 왼쪽 에 나타 나 면 (  , l ++  ,
별표 왼쪽 에 나타 나 기 ) ,만약 l! = 0, l -;
별표 오른쪽 에 나타 나 면 (  , pl ++  ,
별표 오른쪽 에 나타 나 기 ) ,만약 pl! = 0, l -; 그렇지 않 으 면 r + +
그러면 l 과 r 사이 의 최소 값 은 괄호 가 맞 는 개수 입 니 다.
#include
using namespace std;
#define pb push_back
#define mp make_pair
#define rep(i,a,n) for(int i=a;i P;
const int INF =0x3f3f3f3f;
const int inf =0x3f3f3f3f;
const int mod = 1e9+7;
const int MAXN = 105;
const int maxn =1000010;
using namespace std;
char s[15000];
int main(){
  scanf("%s",s);
  int flag = 0 ;
  int r = 0;
  int l = 0;
  int pl = 0;
  for(int i = 0; i < strlen(s);i++){
    if(s[i] == '*') {
      flag = 1;
    }
    if(!flag && s[i] =='(')
      l++;
    else if(!flag && s[i] ==')'){
      if(l) l--;
    }
    else if(flag && s[i] == '('){
      pl++;
    }
    else if(flag && s[i] == ')'){
      if(pl) pl --;
      else r++;
    }
  }
  printf("%d
",l < r ? l : r); }

좋은 웹페이지 즐겨찾기