고수님들 FIXPAREN 질문있습니다!

  • yhw2880
    yhw2880
    #define MAX_SIZE 100
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    string inputStr;    //입력되는 괄호 문자열
    char leftPriority[4];   // 여는괄호의 우선순위
    char rightPriority[4];  // 닫는괄호의 우선순위(당연히 여는괄호의 우선순위와 같음)
    
    char stackParen[MAX_SIZE];  //여는 괄호를 스택에 저장
    int parenTop = 0;   //top을 가리키는 인덱스
    char stackIndex[MAX_SIZE];  //여는 괄호가 나올 때마다 그 인덱스
    위치를 저장
    int indexTop = 0;   //top을 가리키는 인덱스
    
    int f = 0, s = 0;
    
    //우선순위 계산
    bool Calc_priority(char a, char b) {
        for (int i = 0; i < 4; i++) {
            if (rightPriority[i] == a)
                f = i;
            else if (leftPriority[i] == b)
                s = i;
        }
    
        if (f < s)
            return true;
        else if(f > s)
            return false;
    
        return false;
    }
    
    int main() {
        int testCase;
        cin >> testCase;
        while (testCase--){
            cin >> inputStr;
            cin >> leftPriority;
    
            //닫는 괄호 초기화
            for (int i = 0; i < 4; i++) {
                if (leftPriority[i] == '(')
                    rightPriority[i] = ')';
                else if (leftPriority[i] == '{')
                    rightPriority[i] = '}';
                else if (leftPriority[i] == '[')
                    rightPriority[i] = ']';
                else if (leftPriority[i] == '<')
                    rightPriority[i] = '>';
            }
    
            parenTop = 0;   indexTop = 0;
            for (int i = 0; i < inputStr.length(); i++) {
                if (inputStr[i] == '(' || inputStr[i] == '{' || inputStr[i] == '[' || inputStr[i] == '<') {
                    stackParen[parenTop++] = inputStr[i];
                    stackIndex[indexTop++] = i;
                    continue;
                }
                if ((inputStr[i] == ')' && stackParen[parenTop - 1] == '(') || (inputStr[i] == '}' && stackParen[parenTop - 1] == '{')
                    || (inputStr[i] == ']' && stackParen[parenTop - 1] == '[') || (inputStr[i] == '>' && stackParen[parenTop - 1] == '<')) {
                    indexTop--;
                    parenTop--;
                    continue;
                }
                if (Calc_priority(inputStr[i], stackParen[parenTop - 1])) {
                    inputStr[stackIndex[--indexTop]] = leftPriority[f];
                    parenTop--;
                }
                else {
                    inputStr[i] = rightPriority[s];
                    indexTop--;
                    parenTop--;
                }
            }
            cout << inputStr;
        }
    
        return 0;
    }
    

    도저히 이해가 안됩니다.. 어디서 틀렸는지 흐미...
    test케이스좀 알려주시면 안될까요 ㅠㅠ


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