SortGame 문제에 답안을 제출하면 오답이 나옵니다. 정용진 SortGame 에서 시간초과가 뜨더라도 결과값이 정확한지 확인해보고 싶어 구현 후 제출을 했습니다. 여러테스트케이스를 다 확인해도 최소값이 나오는데 오답이라고 나와서 왜그런지 모르겠습니다. 알고리즘은 작은수부터 앞에서 정렬해 나가거나 큰수부터 뒤에서 정렬해 나가는방식으로 했습니다. 이 알고리즘에 반하는 테스트케이스가 있는지 알고 싶습니다. #include <stdio.h> #include <math.h> #include <memory.h> void swap(int *arrNumber, int nSrc, int nDst) { int nTemp = 0; while(true) { if(nSrc >= nDst) { return; } nTemp = arrNumber[nSrc]; arrNumber[nSrc] = arrNumber[nDst]; arrNumber[nDst] = nTemp; ++nSrc; --nDst; } } int main() { int nCaseCnt = 0; scanf("%d", &nCaseCnt); for(int k=0;k<nCaseCnt;k++) { int nNumberLen = 0; scanf("%d", &nNumberLen); if(nNumberLen < 1 || nNumberLen > 8) continue; int arrNumber[8]; int arrNumber2[8]; for(int i=0;i<nNumberLen;i++) { scanf("%d", &arrNumber[i]); } memcpy(arrNumber2, arrNumber, sizeof(int) * 8); int nSwapCount1 = 0; int nMinIndex = 0; while(nNumberLen > nMinIndex) { int nMaxValueIndex = nMinIndex; for(int i=nMinIndex+1;i<nNumberLen;i++) { if(arrNumber[nMaxValueIndex] > arrNumber[i]) nMaxValueIndex = i; } if(nMaxValueIndex != nMinIndex) { swap(arrNumber, nMinIndex, nMaxValueIndex); ++nSwapCount1; } ++nMinIndex; } int nSwapCount2 = 0; while(nNumberLen > 0) { int nMaxValueIndex = 0; for(int i=1;i<nNumberLen;i++) { if(arrNumber2[nMaxValueIndex] < arrNumber2[i]) nMaxValueIndex = i; } if(nMaxValueIndex < (nNumberLen - 1)) { swap(arrNumber2, nMaxValueIndex, nNumberLen - 1); ++nSwapCount2; } --nNumberLen; } printf("%d\n", nSwapCount1 > nSwapCount2 ? nSwapCount2 : nSwapCount1); } return 0; } 8년 전
1개의 댓글이 있습니다. hyunhwan 1 8 1 8 2 4 3 7 5 을 넣으면 3이 나와야 하는데, 돌려보니 5가 나옵니다. 그리고 모든 가능한 경우 - N!의 경우의 수 - 를 헤아리도록 구현하셔야 할 것입니다. 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
정용진
SortGame 에서 시간초과가 뜨더라도 결과값이 정확한지 확인해보고 싶어 구현 후 제출을 했습니다.
여러테스트케이스를 다 확인해도 최소값이 나오는데 오답이라고 나와서 왜그런지 모르겠습니다.
알고리즘은 작은수부터 앞에서 정렬해 나가거나 큰수부터 뒤에서 정렬해 나가는방식으로 했습니다.
이 알고리즘에 반하는 테스트케이스가 있는지 알고 싶습니다.
8년 전