Codility - Permutation check

2020. 3. 10. 00:02codility

문제

문제 설명

배열의 순열을 찾는 문제임.

배열 요소는 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