Codility - Permutation check
2020. 3. 10. 00:02ㆍcodility
문제
문제 설명
배열의 순열을 찾는 문제임.
배열 요소는 1~1,000,000 까지 범위고
배열이 최대길이 N은 1~100,000 임.
배열 요소는 정렬되어 있지 않고 배열의 요소들이 순열이면 return 1, 순열이 아니면 return 0 을 하는 코드를 만들면 됨.
단, 순열은 모조건 1부터 시작한다는 조건이 있음.
소스 코드
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) // 오름차순 비교 함수 구현
{
int num1 = *(int *)a; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
int num2 = *(int *)b; // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
if (num1 < num2) // a가 b보다 작을 때는
return -1; // -1 반환
if (num1 > num2) // a가 b보다 클 때는
return 1; // 1 반환
return 0; // a와 b가 같을 때는 0 반환
}
int main()
{
int numArr[] = {6, 4,1,3,2 };
int nCount = sizeof( numArr ) / sizeof ( int );
qsort( numArr, nCount, sizeof( int ), compare );
for( int i = 0; i < nCount ; i ++ )
{
printf( "%d ", numArr[i] );
}
printf("\n");
int nResult = 1;
int nFirst = numArr[0], nCur = numArr[0], nMax = numArr[nCount-1];
printf("first = %d, max = %d\n", nFirst, nMax);
for( int n = 1 ; n < nCount ; n ++ )
{
if( numArr[n] == nCur )
continue;
if( numArr[n] != (nCur + 1) )
{
nResult = 0;
printf("numArr = %d, nCur = %d\n", numArr[n], nCur);
printf( "Result = %d\n", nResult );
return 0;
}
else
nCur ++;
}
printf( "Result = %d\n", nResult );
return nResult;
}
'codility' 카테고리의 다른 글
codility - OddOcurrenceInArray (0) | 2020.03.10 |
---|---|
codility - BinaryGap (0) | 2020.03.10 |
codility - CyclicRotation (0) | 2020.03.10 |
Codility - FrogJmp (0) | 2020.03.10 |
Codility - MaxCounters (0) | 2020.03.09 |