BRACKETS2 문제의 오답 판정을 이해할수 없습니다.

  • donggee42
    donggee42

    안녕하세요.
    알고스팟에서 처음으로 풀어본 문제라서 꼭 정답 판정을 받고 싶은데 계속 오답이 나오네요 ㅠㅠ
    작성한 프로그램은 스택을 이용하였습니다.
    입력 문자가 { , [, ( 면 Push, 반대면 Pop하는 구조입니다.
    Pop후에는 입력 문자와 Pop한 문자를 Matching후 결과값이 -1이면 틀린것으로 판단합니다.
    값 입력은 Test할때는 input.txt로 받았고 제출할때는 stdin으로 입력되도록 하였습니다. 현재는 input.txt는 주석처리하였습니다.
    어떤 이유때문에 계속 오답 판정인지 모르겠네요. 고수분들이 보시기에 뭐가 문제인지 오류가 나는 입력이라도 알려주시면 감사드리겠습니다.
    아래는 코드입니다.
    감사합니다.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX_LENGTH 10000
    char buf[MAX_LENGTH];
    char stack[MAX_LENGTH];
    int top = -1;
    void push(char chr);
    char pop();
    void push(char chr) {
        stack[++top] = chr;
    }
    char pop() {
        if (top != -1)
            return stack[top--];
        else
            return -1;
    }
    
    char matching(char ori_chr, char pop_chr) {
        switch (ori_chr)    {
        case ']' :
            if (pop_chr == '[')
                return 0;
            else
                return -1;
            break;
        case '}':
            if (pop_chr == '{')
                return 0;
            else
                return -1;
            break;
        case ')':
            if (pop_chr == '(')
                return 0;
            else
                return -1;
                break;
    
            default:
                return -1;
                break;
        }
    }
    int main() {
        FILE * ftr = fopen("input.txt", "r");
        int c, i;
        int length;
        int z;
        char fail_flg = 0;
        char tmp_chr;   
    //  fgets(buf, MAX_LENGTH, ftr);
        fgets(buf, MAX_LENGTH, stdin);
        c = atoi(buf);
        for (i = 0; i < c; i++) {
            fail_flg = 0;
            top = -1;
    //      fgets(buf, MAX_LENGTH, ftr);
            fgets(buf, MAX_LENGTH, stdin);
            length = strlen(buf)-1;
            for (z = 0; z < length; z++) {
                if (buf[z] == '{' || buf[z] == '[' || buf[z] == '(') {
                    push(buf[z]);
                }
                else {
                    tmp_chr = pop();
                    if (matching(buf[z], tmp_chr) != 0) {
                        fail_flg = 1;
                        printf("No\n");
                        break;
                    }
                }
            }
    
            if (fail_flg == 0) {
                if (top != -1) {
                    printf("No\n");
                }
                else 
                    printf("Yes\n");
            }
        }
        return 0;
    }
    

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

    저도 어제 같은 문제를 문의해서 바로 눌러보게되었네요
    우선 코드를 눈으로만 훑어본결과 가장 큰 문제는
    출력이 소문자입니다..
    문제에서는 YES NO 대문자를 요구하고있습니다


    8년 전 link
  • donggee42
    donggee42

    답변 감사합니다. 문자는 대문자 소문자 문제였네요 ㅎㅎ


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