CLOCKSYNC 질문입니다.

  • freestar
    freestar

    안녕하세요

    CLOCKSYNC 문제를 푸는 중입니다.

    완전탐색이라고 해서 완전 무식하게 짰는데도

    계속 오답 결과를 받고 있습니다.

    주어진 예제 테스트 케이스는 물론이고

    나름 이런저런 예제 만들어서 해봤는데도 잘 나왔는데

    도저히 모르겠네요.

    조언 부탁드립니다.

    코드가 좀.. 부끄럽지만 올려봅니다.

    #include<stdio.h>
    
    int clock[16];
    
    
    int chk(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
    {
    
        //0
        clock[0] = (clock[0] + 3 * a) % 12; 
        clock[1] = (clock[1] + 3 * a) % 12; 
        clock[2] = (clock[2] + 3 * a) % 12;
    
        //1
        clock[3] = (clock[3] + 3 * b) % 12; 
        clock[7] = (clock[7] + 3 * b) % 12; 
        clock[9] = (clock[9] + 3 * b) % 12; 
        clock[11] = (clock[11] + 3 * b) % 12;
    
        //2
        clock[4] = (clock[4] + 3 * c) % 12; 
        clock[10] = (clock[10] + 3 * c) % 12; 
        clock[14] = (clock[14] + 3 * c) % 12; 
        clock[15] = (clock[15] + 3 * c) % 12;
    
        //3
        clock[0] = (clock[0] + 3 * d) % 12; 
        clock[4] = (clock[4] + 3 * d) % 12; 
        clock[5] = (clock[5] + 3 * d) % 12; 
        clock[6] = (clock[6] + 3 * d) % 12; 
        clock[7] = (clock[7] + 3 * d) % 12;
    
        //4
        clock[6] = (clock[6] + 3 * e) % 12; 
        clock[7] = (clock[7] + 3 * e) % 12; 
        clock[8] = (clock[8] + 3 * e) % 12; 
        clock[10] = (clock[10] + 3 * e) % 12; 
        clock[12] = (clock[12] + 3 * e) % 12;
    
        //5
        clock[0] = (clock[0] + 3 * f) % 12; 
        clock[2] = (clock[2] + 3 * f) % 12; 
        clock[14] = (clock[14] + 3 * f) % 12; 
        clock[15] = (clock[15] + 3 * f) % 12;
    
        //6
        clock[3] = (clock[3] + 3 * g) % 12; 
        clock[14] = (clock[14] + 3 * g) % 12; 
        clock[15] = (clock[15] + 3 * g) % 12;
    
        //7
        clock[4] = (clock[4] + 3 * h) % 12; 
        clock[5] = (clock[5] + 3 * h) % 12; 
        clock[7] = (clock[7] + 3 * h) % 12; 
        clock[14] = (clock[14] + 3 * h) % 12; 
        clock[15] = (clock[15] + 3 * h) % 12;
    
        //8
        clock[1] = (clock[1] + 3 * i) % 12; 
        clock[2] = (clock[2] + 3 * i) % 12; 
        clock[3] = (clock[3] + 3 * i) % 12; 
        clock[4] = (clock[4] + 3 * i) % 12; 
        clock[5] = (clock[5] + 3 * i) % 12;
    
        //9
        clock[3] = (clock[3] + 3 * j) % 12; 
        clock[4] = (clock[4] + 3 * j) % 12; 
        clock[5] = (clock[5] + 3 * j) % 12; 
        clock[9] = (clock[9] + 3 * j) % 12; 
        clock[13] = (clock[13] + 3 * j) % 12;
    
        for (int k = 0; k < 16; k++)
        {
            if (clock[k] != 0)
                return 0;
        }
        return 1;
    }
    
    
    int main()
    {
        int C;
        int min = 100;
        scanf("%d", &C);
    
        for (int c = 0; c < C;c++)
        {
            for (int i = 0; i < 16; i++)
                scanf("%d", &clock[i]);
    
            for (int a = 0; a < 4;a++)
                for (int b = 0; b < 4; b++)
                    for (int c = 0; c < 4; c++)
                        for (int d = 0; d < 4; d++)
                            for (int e = 0; e < 4; e++)
                                for (int f = 0; f < 4; f++)
                                    for (int g = 0; g < 4; g++)
                                        for (int h = 0; h < 4; h++)
                                            for (int i = 0; i < 4; i++)
                                                for (int j = 0; j < 4; j++)
                                                {
                                                    if (chk(a, b, c, d, e, f, g, h, i, j))
                                                    {
                                                        if (a + b + c + d + e + f + g + h + i + j < min)
                                                            min = a + b + c + d + e + f + g + h + i + j;
                                                    }
                                                }
    
            if (min == 100) min = -1;
    
            printf("%d\n", min);
            min = 100;
        }
        return 0;
    }
    

    9년 전
2개의 댓글이 있습니다.
  • Kureyo
    Kureyo

    chk함수로 clock값들을 바꾼뒤에 원상복귀를 해주셔야할듯합니다


    9년 전 link
  • freestar
    freestar

    정말 감사합니다. 덕분에 해결했습니다.


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