CLOCKSYNC 오답처리 문의(예제결과는 모두 클리어) 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; } 4년 전
0개의 댓글이 있습니다. 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
justlovu
완전탐색 알고리즘을 적용하여
모든 클럭이 12시로 정렬되는 경우중에 최소 탐색횟수를 찾는
방식으로 코딩했습니다.
예제의 2가지 경우는 모두 정상적인 답이 나왔으며,
답이 나올 수 없는 경우의 값을 입력하여 -1이 나옴을 확인하였습니다. (처리시간도 1초 이하 소요)
제출하면 계속 오답처리가 됩니다.
확인 부탁드립니다.
4년 전