CLOCKSYNC 오답처리 문의(예제결과는 모두 클리어)

  • justlovu
    justlovu

    완전탐색 알고리즘을 적용하여
    모든 클럭이 12시로 정렬되는 경우중에 최소 탐색횟수를 찾는
    방식으로 코딩했습니다.
    예제의 2가지 경우는 모두 정상적인 답이 나왔으며,
    답이 나올 수 없는 경우의 값을 입력하여 -1이 나옴을 확인하였습니다. (처리시간도 1초 이하 소요)
    제출하면 계속 오답처리가 됩니다.
    확인 부탁드립니다.

    #include <stdio.h>
    #include <stdlib.h>
    
    #define __DEBUG__   0
    #define N_CLOCK     16
    #define N_BUTTON    10
    
    int button[N_BUTTON] = {0, };
    int clockIndex[N_BUTTON][5] = {
        {0, 1, 2, -1, -1},          // 0
        {3, 7, 9, 11, -1},          // 1
        {4, 10, 14, 15, -1},        // 2
        {0, 4, 5, 6, 7},            // 3
        {6, 7, 8, 10, 12},          // 4
        {0, 2, 14, 15, -1},         // 5
        {3, 14, 15, -1, -1},        // 6
        {4, 5, 7, 14, 15},          // 7
        {1, 2, 3, 4, 5},            // 8
        {3, 4, 5, 9, 13}            // 9
    };
    
    int clock[N_CLOCK];
    int mininumSearchCount = 9999;
    
    void interpreteTime(void)
    {
        int i;
        for(i=0;i<N_CLOCK;i++)
            clock[i] = (clock[i]/3)%4;
    }
    
    void clearButton(void)
    {
        int i;
    
        for(i=0;i<N_BUTTON;i++)
            button[i] = 0;
    }
    void pushButton(int buttonIndex)
    {
        int i;
        int index;
    
        button[buttonIndex]++;
    
        button[buttonIndex] = button[buttonIndex]%4;
    
        for(i=0;clockIndex[buttonIndex][i] >= 0 && i<5;i++)
        {
            index = clockIndex[buttonIndex][i];
            clock[index] = (clock[index]+1)%4;
        }
    }
    
    int isAligned(void)
    {
        int i;
    
        for(i=0;i<N_CLOCK;i++)
            if(clock[i] != 0)
                return 0;
        return 1;
    }
    
    void search(int searchCount, int depth)
    {
        int i, j;
        int index;
        int rtn;
    
    
        if(isAligned())
        {
            if(mininumSearchCount > searchCount)
                mininumSearchCount = searchCount;
            return;
        }
        else if(depth >= N_BUTTON)
        {
            return;
        }
        else
        {
            for(i=0;i<4;i++)
            {
                search(searchCount, depth+1);
                pushButton(depth);
                searchCount++;
            }
        }
    }
    
    
    int main(int argc, char *argv[])
    {
        FILE *fp;
        int testCase;
    
        scanf("%d", &testCase);
    
    #if __DEBUG__   
        fp = freopen("input.txt","r",stdin);
    #endif
    
        while(testCase--)
        {
            clearButton();
            mininumSearchCount = 9999;
            scanf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d" , 
                    &clock[0], &clock[1], &clock[2], &clock[3], &clock[4], 
                    &clock[5], &clock[6], &clock[7], &clock[8], &clock[9],
                    &clock[10], &clock[11], &clock[12], &clock[13], &clock[14],
                    &clock[15]);
            interpreteTime();
            search(0, 0);
            if(mininumSearchCount == 9999) printf("%d\n", -1);
            else printf("%d\n", mininumSearchCount);
        }
    
    #if __DEBUG__   
        fclose(fp);
    #endif
    
        return 0;
    }
    

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