LECTURE NOTE 문제 질문

  • practice
    practice

    http://www.algospot.com/problems/read/LECTURE

    이 문제인데요. 문제에서 제시된 테스트케이스들이나
    제가 임의로 테스트 해 본 케이스들에 대해서도 다 맞는 거 같은데
    계속 WA이 뜨네요 ㅠㅠ 안되는 케이스가 있다면 그걸 중점으로
    디버깅이라도 해보겠는데 말이죠 ㅠㅠ 일단 코드를 올려봅니다...

    #include
    #include

    #define LEN 1001

    int testcase;
    char input[LEN];

    int Compare(char* input, int a, int b)
    {
    if(input[a] > input[b])
    return 1;
    else if(input[a] < input[b])
    return 0;
    else
    {
    if(input[a + 1] > input[b + 1])
    return 1;
    else if(input[a + 1] < input[b + 1])
    return 0;
    else
    return 0;
    }
    }

    void Swap(char* input, int a, int b)
    {
    char temp;

    temp = input[a];
    input[a] = input[b];
    input[b] = temp;

    }

    void Sort(char* input)
    {
    int length = strlen(input) / 2;
    int i, j;

    for(i = 2 * (length - 1) ; i > 0 ; i -= 2)
    {
        for(j = 0 ; j < i ; j += 2)
        {
            if(Compare(input, j, j + 2) == 1)
            {
                Swap(input, j, j + 2);
                Swap(input, j + 1, j + 3);
            }
        }
    }

    }

    int main()
    {

    scanf("%d",&testcase);
    
    while(testcase--)
    {
        fflush(stdin);
        gets(input);
        Sort(input);
        puts(input);
    }
    
    return 0;

    }

    어디서 잘못이 일어난건지 꼭좀 알고싶습니다 ㅠㅠ 부탁드립니다!


    13년 전
3개의 댓글이 있습니다.
  • Toivoa
    Toivoa

    fflush 때문에 그런것입니다. scanf를 쓰시거나, while문으로 들어가기 전에 입력된 숫자의 뒷부분 (\n\r)을 gets를 추가해서 받아주는 식으로 수정하시면 됩니다.

    예를 들어서

    scanf("%d",&testcase);
    gets(input);
    
    while(testcase--)
    {
        gets(input);
        Sort(input);
        puts(input);
    }

    이렇게 수정하면 AC를 받을 수 있습니다.


    13년 전 link
  • Toivoa
    Toivoa

    fflush는 대회용 코드에는 사용하지 않는 것을 권합니다.
    fflush 문제에 대해서 자세한 것은 http://algospot.com/discussion/comment/5375/#Comment_5375 을 참고하세요.


    13년 전 link
  • practice
    practice

    아하그렇군요! 감사합니다 ^^ !!!!!!!


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