Mismatched Brackets 질문입니다.

  • 햇반2
    햇반2

    https://algospot.com/judge/problem/read/BRACKETS2

    (, {, [ 입력시 종류에 따라 스택에 넣은 후
    ), }, ] 입력될 경우 스택의 top을 체크하여
    짝이 맞는지 체크하고 있습니다.

    루프 마지막에는 오픈 Brackets의 처리를 해 주고 있습니다.

    제출시 오답처리가 되고 있는데 조언 부탁드립니다.

    #include <iostream>
    #include <string>
    
    using namespace std;
    int main()
    {
        int testCase = 0;
        int size = 0;
        int top = -1;
        int stack[10000] = { 0 };
        char input[10000] = { 0 };
        int outCnt = 0;
        string* outStr;
        cin >> testCase;
        outStr = new string[testCase];
        for (int i = 0; i < testCase; i++) {
            cin >> input;
            while (input[size] != '\0'){
                size++;
            }
    
            for (int j = 0; j < size; j++)
            {
                if (input[j] == '(')
                    stack[++top] = 1;
                else if (input[j] == '{')
                    stack[++top] = 2;
                else if (input[j] == '[')
                    stack[++top] = 3;
    
                else if (input[j] == ')') {
                    if (stack[top] == 1) {
                        stack[top--] = 0;
                    }
                    else {
                        outStr[outCnt++] = "NO";
                        break;
                    }
                }
                else if (input[j] == '}') {
                    if (stack[top] == 2) {
                        stack[top--] = 0;
                    }
                    else {
                        outStr[outCnt++] = "NO";
                        break;
                    }
                }
                else if (input[j] == ']') {
                    if (stack[top] == 3) {
                        stack[top--] = 0;
                    }
                    else {
                        outStr[outCnt++] = "NO";
                        break;
                    }
                }
                if (j == size - 1) {
                    if(top == -1)
                        outStr[outCnt++] = "YES";
                    else
                        outStr[outCnt++] = "NO";
                }
    
            }
            top = -1;
        }
        for (int i = 0; i < testCase; i++)
            cout << outStr[i] << endl;
    }
    

    9년 전
3개의 댓글이 있습니다.
  • JongMan
    JongMan

    ))) 같은 형태의 입력이 주어질 때 메모리 참조 오류가 나는 것 같네요. 배열 크기에도 문제가 있습니다.


    9년 전 link
  • 햇반2
    햇반2

    말씀해주신 부분들 생각해 보았는데
    1. top이 -1일때(stack[-1]일때) 배열값을 참조하여 비교하는것
    2. 배열에 +1을 더 안해준것
    문제라고 생각하고 있습니다. 수정은 해봤는데 계속 오답이 뜨네요
    혹시 로직 자체가 틀린것인지요...??


    9년 전 link
  • 햇반2
    햇반2

    아 메모리 초기화를 안해줘서 발생했던것 같습니다.
    감사합니다!


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