F.R.I.D.A.Y.

BAEKJOON 9012 : 괄호 for C 본문

DEV/Algorithm

BAEKJOON 9012 : 괄호 for C

F.R.I.D.A.Y. 2019. 10. 27. 23:01
반응형

 스택을 이용하는 문제라고는 하지만 잘 생각해보면 굳이 스택을 사용하지 않아도 되는 문제입니다.


문제의 핵심은

 결국 괄호의 특성을 이해하는 것이라고 생각합니다. 결국 괄호가 제 기능을 하기 위해서는 여는 괄호( 와 닫는 괄호) 가 1대 1로 잘 맞아 떨어져야합니다. 단순히 숫자가 맞아야하는 것이 아니라, 앞서 여는 괄호가 n개 나왔다면 뒤에 닫는 괄호는 여는 괄후 수만큼, 즉 n개가 나와야합니다.

 

 생각을 해보면 스택을 이용하지 않아도 됩니다. 정수를 저장하는 변수를 선언하여 여는 괄호를 만나면 1 올려주고, 닫는 괄호를 만나면 1 내려주면 됩니다. 이 변수의 값이 0보다 작으면 바로 문제에서 설명하는 올바르지 않은 괄호 문자열(VPS)가 아닌게 되는 것입니다.

 

 위에서 설명한 변수가 아래에서는 parenthesisCount가 되겠네요.

#include <stdio.h>

int main(void){
    int caseCount;
    scanf("%d", &caseCount);
    
    while(caseCount--){
        int parenthesisCount = 0;
        char str[51];
        scanf("%s", str);
        int i;
        for(i = 0; str[i]; ++i){
            if(str[i] == '('){
                parenthesisCount++;
            }else{
                parenthesisCount--;
                if(parenthesisCount < 0){
                    break;
                }
            }
        }
        
        if(parenthesisCount == 0){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
        
    }
    
    
    return 0;
}
728x90
반응형

'DEV > Algorithm' 카테고리의 다른 글

BAEKJOON 11047 : 동전 0 for C  (0) 2019.11.18
BAEKJOON 10845 : 큐 for C  (0) 2019.10.31
BAEKJOON 4673 : 셀프 넘버 for C  (0) 2019.10.11
BAEKJOON 1065 : 한수 for C  (0) 2019.10.11
BAEKJOON 1009 : 분산처리 for C  (0) 2019.04.06
Comments