BRACKETS2 질문 합니다.

  • uecoyk
    uecoyk

    case 별로 push, pop 을 수행하도록 구현하였습니다.
    {,(,[ 모두 합쳤을 때 pair 로 입력이 되어야 하므로, stack array는
    MAX(10000)/2 로 잡고 5000 이 넘으면 짝이 맞지 않는 것으로 합니다.
    입력 끝까지 해결했는데, stack array에 값이 있으면, 짝이 맞지 않는 것으로 하였습니다.

    오류가 나오는데 추가로 고려해야 할 것이 있는지 검토 요청드립니다

    #include <stdio.h>
    #include <string.h>
    
    int  top, bottom;
    char bracket[5000];
    int push(int data)
    {
        if (top < 5000)
            top++;
        else
            return -1;
        bracket[top] = data;
        return 0;
    }
    
    int pop(int data)
    {
        if (top == -1 )
            return -1;
        if (bracket[top] != data)
            return -1;
        else
        {
            bracket[top] = 0;
            if (top > -1)
                top--;
            return 0;
        }
    }
    int main(void)
    {
        int i, j, ret;
        unsigned int test_case, N=0;
        char    buf[10001];
    
        //freopen("input.txt", "r", stdin);
        setbuf(stdout, NULL);
        scanf("%d", &N);
        if (N > 100)
            return 1;
    
        for (test_case = 0; test_case <= N; test_case++)
        {
            memset(buf, 0, sizeof(buf));
            memset(bracket, 0, sizeof(bracket));
            scanf("%s", buf);
    
            i = 0;
            top = -1;
            bottom = 0;
            while (buf[i])
            {
                ret = 0;
                switch (buf[i]){
                case '(':
                    ret = push(1);
                    break;
                case ')':
                    ret = pop(1);
                    break;
                case '{':
                    ret = push(2);
                    break;
                case '}':
                    ret = pop(2);
                    break;
                case '[':
                    ret = push(3);
                    break;
                case ']':
                    ret = pop(3);
                    break;
                }
    
                if (ret)
                    break;
                i++;
            }
            if (ret)
                printf("No\n");
            else
            {
                if (bracket[bottom])
                    printf("No\n");
                else
                    printf("Yes\n");
            }
        }
    
        return 0;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • ison5059
    ison5059

    돌려보지 않아서 잘 모르겠지만 일단 문제 명세에서는 출력의 결과가 다 대문자로 나와야하는데 여기서는 대소문자가 혼용되있네요~ Yes -> YES / No -> NO


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.