프로그래밍/C, C++, Java, Python

[C, C++] 1~N 연속된 수로 이루어진 랜덤 배열

포도알77 2019. 3. 4. 16:18


1~N, N~M으로 이루어진 배열 또는 이미 지정된 값들로 구성된 배열을 랜덤하게 생성하는 방법에 대해 누군가 질문한 적이 있다. 


 만일 테스트 용도로 그 값들을 랜덤하게 생성해야 한다면, 시간에 따른 RAND함수로 도출하는 것은 절대적으로 리소스 낭비가 크다. 


 예를 들어, 1~10까지의 수로 이루어진 배열 [1,2,3,4,5,6,7,8,9,10]을 랜덤하게 뽑으려면 확률상 몇번의 RAND()를 불러야 할까? 

 따라서 랜덤으로 배열을 만드는 것 보다. 이미 만들어진 배열을 랜덤으로  섞는 것이 더 유리하다.   C++이나 Java와 같은 언어에서는 이미 이런 기능을 함수로 만들어 제공한다. 

 함수의 이름은 Shuffle이다.  


만약 셔플 함수를 제공하지 않는 다면 아래와 같이섞을 수 있다.

void shuffle(int* arr, int size){ 
   srand(time(null)); 
   for(int i = size-1; i > 0; i--){ 
         int j = rand() % (i+1); 
         swap(arr[i], arr[j]);
   } 
} 
int arr[30]; 
for(int i = 0; i < 30; i++)  
arr[i]= i+1;  
shuffle(arr, 30);
 



페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사