1

Shuffle

Shuffle

노아의 블로그

    목차
반응형

강사님께서 따끔한 한마디를 하신 후, 반에서 미션에 참가하는 모임을 만들었다. 그래서 나도 참가했다.
하루에 한번 미션을 수행해야 한다. 오늘의 주제는 셔플이다. 1부터 100까지의 수를 나열하고 무작위로 섞는것이다.
 

먼저 배열에 1부터 100까지의 수를 담는다.
 
여기서 어떻게 섞지? 라는 의문이 들수도 있는데.. 
 
너무 추상적으로 생각하기보다는 내 앞에 10개의 공이 있고 공에 번호가 붙여져있고(로또공) 그게 나열되있다고 생각해보자.
 

당신은 어떻게 공을 섞을것인가? 
 
나라면, 아무 공이나 고르고 또 공을 골라서 위치를 바꿀것이다.
 
만약에, 2를 골르고 위치를 4와 바꾸고 싶다면  2와 4를 교환하면 된다.
 
교환하면 되는데, 좀만 더 생각해서 모든 공들이 섞일 수 있는 기회를 주고싶다. 
 
일단, 교환이라는 개념을 가지고 모든 공들이 섞일 수 있는 기회는 결국 순차적으로 모든 공들을 랜덤으로 섞으면 되는 것이다.
 
그래서 첫번째 공과 랜덤한 공을 선택해서 둘이 바꾼다. 그리고 두 번째.. 세 번째 공과 랜덤한 위치의 공을 서로 변경한다. 그것을 계속한다. 그러면 모든 공에 섞일 수 있는 기회가 주어지고 그것이 셔플이 된다.
 
이제 이 원리를 이용해서 코딩을 한다면 이런 느낌일것이다.

0부터 100까지 순차적으로 돌면서 랜덤한 위치와 교환하기!!
 
여기서, 우리가 생각하지 못한 temp라는 개념이 존재하는데
 
만약 첫 번째와 두 번째 교환을 한다 치면 array[1] = array[2] 이런식으로 생각할수도 있다.
하지만 이렇게 한다면? 첫 번째에 두 번째 공이 들어간다. 하지만 두 번째 공은? 첫 번째 공을  넣어야 하는데 이미 첫 번째 공은 두번째 공을 가져버렸다. 따라서 임시로 첫 번째 공을 저장하는것이 필요하다.
 
 그러니 임시로 저장된 첫 번째 공을 두 번째에 넣는 것!

반응형

'컴퓨터 > 알고리즘' 카테고리의 다른 글

알고리즘 공부 1  (0) 2023.10.26
퀵 정렬 (Quick Sort)  (0) 2023.10.16
정렬 알고리즘 (버블 정렬,선택 정렬)  (0) 2023.10.15