fixparen 문제에 질문이있습니다.

  • anhbbb
    anhbbb

    input1에 수정할 괄호들을 문자열로 받고 input2에 우선순위대로 4문자를 받게 짯구요
    input1문자열을 찾다가 닫는 괄호가 나오면 거기서부터 반대로 여는 괄호를 찾은 다음에 여는 괄호가 나타나면 우선순위를 비교하여 우선순위가 높은 괄호로 바꾸는 식으로 짰습니다.
    어느부분이 오답인지 제가 놓친 test case를 알려주셨으면 합니다~
    혹은 제가 문제를 잘못 이해하고있다면 알려주시기 바랍니다~

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    
    int FindPriority(char Target, char String[4]);
    int Compare(char Target);
    
    char Priority[4];
    char Input1[101];
    char Input2[5];
    char Output[101];
    int main()
    {
        int T;
        scanf("%d", &T);
    
        int n;
        int N;
        int i, j;
        int Count = 0;
        for (n = 0; n < T; n++)
        {
            scanf("%s %s", &Input1, &Input2);
    
            N = strlen(Input1);
            for (i = 0; i < N; i++)
            {
                if (!Compare(Input1[i]))
                {
                    for (j = i - 1; j > -1; j--)
                    {
                        if (Compare(Input1[j]))
                        {
                            if (FindPriority(Input1[j], Input2)>FindPriority(Input1[i], Input2))
                            {
                                Output[j] = Input1[j];
                                if (Output[j] == '<')
                                    Output[i] = '>';
                                else if (Output[j] == '{')
                                    Output[i] = '}';
                                else if (Output[j] == '(')
                                    Output[i] = ')';
                                else if (Output[j] == '[')
                                    Output[i] = ']';
                                Input1[j] = '\0';
                                Input1[i] = '\0';
                            }
                            else if (FindPriority(Input1[j], Input2)<FindPriority(Input1[i], Input2))
                            {
                                Output[i] = Input1[i];
                                if (Output[i] == '>')
                                    Output[j] = '<';
                                else if (Output[i] == '}')
                                    Output[j] = '{';
                                else if (Output[i] == ')')
                                    Output[j] = '(';
                                else if (Output[i] == ']')
                                    Output[j] = '[';
                                Input1[j] = '\0';
                                Input1[i] = '\0';
                            }
                            else
                            {
                                Output[i] = Input1[i];
                                Output[j] = Input1[j];
                                Input1[j] = '\0';
                                Input1[i] = '\0';
                            }
                            break;
    
                        }
                    }
                }
    
            }
            for (i = 0; i < N; i++)
            {
                printf("%c", Output[i]);
                Output[i] = '\0';
            }
            printf("\n");
    
        }
    
    
    }
    
    
    
    int FindPriority(char Target, char String[4]) //우선순위 찾기
    {
        int i;
        if (Target == '>' || Target == '<')
        {
            for (i = 0; i < 4; i++)
            {
                if (String[i] == '<' || String[i] == '>')
                    return 3 - i;
            }
        }
        else if (Target == '{' || Target == '}')
        {
            for (i = 0; i < 4; i++)
            {
                if (String[i] == '{' || String[i] == '}')
                    return 3 - i;
            }
        }
        else if (Target == ')' || Target == '(')
        {
            for (i = 0; i < 4; i++)
            {
                if (String[i] == '(' || String[i] == ')')
                    return 3 - i;
            }
        }
        else if (Target == '[' || Target == ']')
        {
            for (i = 0; i < 4; i++)
            {
                if (String[i] == '[' || String[i] == ']')
                    return 3 - i;
            }
        }
    }
    
    
    int Compare(char Target) //여는건지 닫는건지 확인
    {
        if (Target == '{' || Target == '[' || Target == '(' || Target == '<')
        {
            return 1;
        }
        else if (Target == '}' || Target == ')' || Target == ']' || Target == '>')
            return 0;
    }
    

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

    '\0' 때문에 Compare()가 항상 올바른 값을 리턴하지 않을 수도 있습니다. 다른 함수도 마찬가지고요.


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