BRANCKETS2질문있습니다

  • algoalgoalgo
    algoalgoalgo

    제가 짠 알고리즘은 입력받은 괄호의 갯수가 짝수개가 아닐 경우 바로 false를 리턴해주고
    열린 괄호가 나올 경우 짝이 맞는 닫힌 괄호를 다른 배열에 저장해주어 비교해주는 방식입니다.
    닫힌괄호를 저장해놓은 배열에 아직 값이 남아있는데도 불구하고 입력이 끝난 경우 false를 리턴해줍니다.
    제가 놓치고 있는 부분이 어디인지 잘 모르겠습니다..

    #include<iostream>
    #include<fstream>
    #include<cstring>
    
    using namespace std;
    
    char* inputArr = new char;//입력받은캐릭터값저장하는 배열
    char* openArr = new char;//열린괄호를 저장하고 있는 배열
    int j;//openArr의 index
    
    bool match(char* brankets) {
        if ((strlen(brankets) % 2) > 0) return false;
        else {
            for (int i = 0; i < strlen(inputArr); i++) {
                if (inputArr[i] == '{') {
                    openArr[j] = '}';
                    j++;
                }
                if (inputArr[i] == '(') {
                    openArr[j] = ')';
                    j++;
                }
                if (inputArr[i] == '[') {
                    openArr[j] = ']';
                    j++;
                }
                if ((inputArr[i] != '{') && (inputArr[i] != '(') && (inputArr[i] != '[')) {
                    if (strlen(openArr) == 0)
                        return false;
                    else {
                        if (inputArr[i] == openArr[j - 1]) {
                            openArr[j - 1] = NULL;
                            j--;
                        }
                        else
                            return false;
                    }
                }
            }
        }
        if (strlen(openArr) != 0)
            return false;
        return true;
    }
    
    int main() {
        ifstream input;
        input.open("input.txt");
    
        int C;
        //cin >> C;
        input >> C;
    
        while (C != 0) {
            j = 0;
            //cin >> inputArr;
            input >> inputArr;
    
            cout << (match(inputArr) ? "YES" : "NO");
            cout << endl;
    
            C--;
        }
        return 0;
    }
    

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