https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAX 51

char stack[MAX];
top = -1;

void push(char a) {
    stack[++top] = a;
}

char pop(void) {
    return stack[top--];
}

/* // 스택 출력 함수
void printStack(void) {
    for (int i = 0; i <= top; i++) {
        printf("%c", pop());
    }
}
*/

int vps(char ps[]){


    for (int i = 0; i<strlen(ps); i++) {
       char c = ps[i];
        if (c == '(') { // 여는 괄호면 push
            push(c);
        }

        else { // 닫는 괄호일 때
            if (top != -1) { // stack 이 비어있지 않으면
                pop();
            }
            else { // stack이 비어있으면
                return 0; // vps가 아님
            }
        }
    }

    if (top != -1) return 0; // 반복문이 끝나고 스택에 남아있으면 vps 아님
    else return 1; // 이 외는 모두 vps 이다.
}


int main(void) {
    int t; // t: PS 개수
    int i; // 반복
    char ps[MAX];

    scanf("%d", &t);

    for (i = 0; i < t; i++) {
        scanf("%s", ps);
        if (vps(ps)) printf("YES\n");
        else printf("NO\n");
        
        // stack 초기화
        while (top != -1) {
            pop();
        }
    }
    
       return 0;
}

 

 

아래 티스토리 보고 공부

https://blockdmask.tistory.com/148

 

+ Recent posts