BRACKETS2 문제이서 오답부분을 모르겠어요

  • jskdmswls
    jskdmswls

    괄호 닫기 문제인데 오답부분을 못찾겟습니다
    stack 을 이용하긴 했는데 구조체보단 그냥 배열을 이용했습니다
    { [ ( 가 나올땐 스텍이 해당하는 숫자를 넣어주고
    } ] ) 가 나올땐 스택의 top에 해당하는 부분이 짝이 맞으면 pop하게 구현했습니다

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int stack[10000];
        char str[10001] = {NULL};
        int top=0;
        int C;
        int i,l;
    
        scanf("%d",&C);
    
        for(i=0 ; i<10000 ; i++)
                stack[i] = 0; // stack 초기화
    
        while(C--)
        {
            scanf("%s",str);
    
            l=strlen(str);
    
            // stack은 [1] 부터 입력시작
            for(i=0; i<l ; i++)
            {
                if(str[i] == '[')
                {
                    top++;
                    stack[top] = 1;
    
                }
                else if(str[i] == ']')
                {
                    if(stack[top] == 1)
                    {
                        stack[top] = 0;
                        top--;
                    }
                    else
                    {
                        break;
                    }
                }
                else if(str[i] == '(')
                {
                    top++;
                    stack[top] = 2;
    
                }
                else if(str[i] == ')')
                {
                    if(stack[top] == 2)
                    {
                        stack[top] = 0;
                        top--;
                    }
                    else
                    {
                        break;
                    }
                }
                else if(str[i] == '{')
                {
                    top++;
                    stack[top] = 3;
    
                }
                else if(str[i] == '}')
                {
                    if(stack[top] == 3)
                    {
                        stack[top] = 0;
                        top--;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                    break;
    
            } // for 종료
    
            if(top==0)
                printf("YES\n");
            else
                printf("NO\n");
    
            top = 0; // top 초기화
            for(i=0 ; i<10000 ; i++)
                stack[i] = 0; // stack 초기화
    
    
        } // while 종료
    
    }
    

    8년 전
2개의 댓글이 있습니다.
  • Toivoa
    Toivoa

    ] 과 같은 케이스에서 top이 0인 상태에서 break걸리기 때문에 YES가 나올 것 같습니다.


    8년 전 link
  • jskdmswls
    jskdmswls

    아~ 감사합니다 그거 해결하니까 정답됬어요 ㅎㅎ


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