티스토리 뷰

C++

20160429_배열원소섞기(shuffle)

cho22 2016. 4. 30. 15:22
반응형

1. shuffle

1-1. 배열

 같은 타입의 변수들을 모아 번호를 붙여 놓은것으로

int num[10] ; 의 형태로 쓸 수 있다.

int num [10] ; 은 int 형 변수를 10개모아 num[0]부터 num[9]까지의 10개의 변수를 모아놓은 배열이라고 할 수 있다.

그림을 통해 보면

으로 볼 수 있다.

 

1-2. 배열의 원소 섞기의 원리

배열의 원소를 섞기 위해선 임의의 배열 원소 2개를 뽑아 자리를 바꿔주는 행동을 여러번 반복하면 된다.

예를들어

int num[10] = {0,1,2,3,4,5,6,7,8,9};

위의 배열은 0부터 9로 초기화되어있는 배열 num이다. 

 그림으로 보면 아래와 같이 되어 있다.

원소를 섞는방법은 num[1]의 원소와 num[7]의 원소를 뽑아 서로 자리를 바꿔주는것이다.

두 값을 바꿔주기위해 temp라는 변수가 필요하다.

temp에 num[1]의 값을 저장해놓고, num[1]에 num[7]값을 넣고, num[7]에 temp에 저장해놓은 num[1]의 값을 저장해놓으면 된다.

temp를 사용하는 이유는 temp에 num[1]의 값을 저장하지 않은채로 num[7]의 값을 num[1]에 넣으면

위의 그림과 같이 num[1]에 있던 1이 사라지기 때문이다.

num[1]의 값을 잠시 temp 에 저장 해놓으면 위의 그림과 같이 되어도 temp에 num[1]의 값이 저장되어 있기 때문에 num[7]에 num[1]의 값이었던 1을 넣을 수 있게 되는것이다.

int temp;

temp = num[1];

num[1] = num[7];

num[7] = temp;

위의 소스와 같이 사용할 수 있다.

실행 한다면

그림과 같이 num[1]과 num[7]의 값이 바뀐것을 볼 수 있다.

위와같은 방법을 여러번 반복하면 배열 num의 원소들은 섞일 것이다.

 

1-3. 배열 원소 섞기

1-2의 과정을 여러번 반복하기위해 for문을 사용하면 된다. 

아래의 전체 소스코드를 참고하면 된다.

#include <iostream>

#include <time.h>    //rand()함수를 사용하기위해 추가한다.

using namespace std;

int main() {

int num[10];    // int형 size가 10인 배열을 선언

for(int i=0; i<10; i++) {     // 배열 num을 0~9로 초기화하는 for문

num[i] = i;

}

for(int i=0; i<10; i++) {    // 배열의 원소를 출력한다.

cout << num[i] << " " ;

}

cout << endl;

 

srand(time(NULL));    // 랜덤한 수를 발생하기 위해 사용한다.

for(int i=0; i<30; i++) {    // 섞는작업을 30번 반복하기 위한 for문

int randNum1 = rand() % 10;    //0~9까지의 랜덤한 수를 발생한다.

int randNum2 = rand() % 10;

int temp;

temp = num[randNum1];

num[randNum1] = num[randNum2];

num[randNum2] = temp;

}

 

for(int i=0; i<10; i++) {    // 배열의 원소를 출력한다. 섞인 배열을 확인할 수 있다.

cout << num[i] << " " ;

}

cout << endl;

return 0;

}

 

 

 

 

 

 

 

반응형

'C++' 카테고리의 다른 글

20160504_문자열  (0) 2016.05.06
20160503_야구게임만들기  (0) 2016.05.04
20160428_제어문, 제어문활용하기  (0) 2016.04.29
20160427_반복문 활용, 배열  (0) 2016.04.28
20160426_반복문  (0) 2016.04.26
댓글