codility - CyclicRotation

2020. 3. 10. 02:14codility

배열(int A[])에 숫자들이 있고 K번 만큼 회전한 결과 값 요소를 제출하세요~ 입니다.

여기서 말하는 회전은 오른쪽으로 쉬프트 한 결과를 말하는 것입니다.

즉, A[] = {1, 2, 3, 4, 5}이렇게 숫자가 들어 있고 3회전을 한다면.

 

0 회전 : {1, 2, 3, 4, 5}

1 회전 : {5, 1, 2, 3, 4}

2 회전 : {4, 5, 1, 2, 3}

3 회전 : {3, 4, 5, 1, 2}

 

이렇게 되고 3회전한 결과 값이 있는 배열 요소를 return 하면 되는 것입니다.

만약 5회전이라면 ?? 결과는 0회전과 같은 결과입니다.

6회전 이라면? 1회전과 같은 결과구요.

즉, 회전하는 방식(쉬프트)은 같지만, 배열 길이에 따라 여러번 회전 했을 때 결과 값이 달라진다는 뜻입니다.

 

소스코드

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Results {
  int * A;
  int N; // Length of the array
};

struct Results solution( int A[], int N, int K );

int main()
{ 
  int A[] = { 5, 9, 10, 1, 2, 100 }; 
  int nCount = sizeof( A ) / sizeof( int );
  int nRotationCount = 5;
  
  for( int n = 0 ; n < nCount ; n ++ )
  {  
     printf("%d ", A[n] );
  }
  printf("\n");
  
  solution( A, nCount, nRotationCount );
  
  return 0;
}

struct Results solution( int A[], int N, int K )
{
   struct  Results sResults;
   
   sResults.N = N;

   if( N == K )
   {
     sResults.A = A;
     return sResults;
   }   
   int nNeedRTime = K % N;

   int *Temp = (int*)malloc(N*sizeof(int) );
   for( int n = 0 ; n < N ; n ++ )
   {
      int nIndex = (n + nNeedRTime) % N;
      printf("index = %d, value = %d\n", nIndex, A[n]);      
      Temp[nIndex] = A[n];
   }

   sResults.A = Temp;
   printf("save success\n");
   for( int count = 0 ; count < N ; count ++ )
   {
      printf("%d ", Temp[count] );
   }
   printf("\n");

   return sResults;
}

 

'codility' 카테고리의 다른 글

codility - OddOcurrenceInArray  (0) 2020.03.10
codility - BinaryGap  (0) 2020.03.10
Codility - FrogJmp  (0) 2020.03.10
Codility - Permutation check  (0) 2020.03.10
Codility - MaxCounters  (0) 2020.03.09