이것 또한 단순구현입니다. ()괄호 두개가 모두 만난다면 식이 성립한다는 아이디어와 ')'이게 '(' 보다 한번이라도 먼저 나온다면 그 식은 성립하지 않는다는 생각을 하면 쉽게 풀리는 문제죠. 저는 저 괄호식을 문자열로 생각하지 않고 '('와 ')'의 개수를 생각했습니다. 연산이 끝났을 때 두 괄호의 개수가 같다면 전부 다 성립한 것이고, 한 번이라도 ')'의 개수가 많다면 바로 실행을 멈추고 "NO"를 출력하여 문제를 해결했습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>
int main() {
    int n,a=0,b=0,i;
    char str[50];
    scanf("%d",&n);
    while(n--){
        scanf("%s",str);
        for(i = 0; i < strlen(str); i++){
            if(str[i]=='(')
                a++;
            else if(str[i]==')')
                b++;
            if(a<b)
                break;
        }
        if(a==b) printf("YES\n");
        else printf("NO\n");
        a=0;
        b=0;
    }
    
    return 0;
}
cs

 

 

+ Recent posts