본문 바로가기
GAS/[CAS_손코딩]

랜덤정렬하기

by 일등미노왕국 2023. 6. 20.

https://www.youtube.com/watch?v=bV7nQNdv0YA 

Excel And Vba님 코드를 보면서 앱스스크립트 개념을 다잡고 있어 코드 리뷰를 해보도록 하겠다.

더보기
function rndX() {
  let sht = SpreadsheetApp.getActiveSheet();
  let v= sht.getRange("b4:b17").getValues();
   
  v.sort(()=>Math.random()-0.5)
  let t = sht.getRange("d4:d17").setValues(v);

  let val = sht.getRange("f8");
  val.setValue(val.getValue() + 1 );
}

 

코드는 평범하였지만  

   v.sort(()=>Math.random()-0.5)

이부분이 이해가 되지않았다. 왜 마이너스 0.5를 뺄까에 모든 신경이 곤두설수 밖에 없었다. 혹시나 해서 구글신을 모셨봤더니...허걱

자바스크립트에서는 이코드가 랜덤으로 정렬하는 것으로 유명한 듯 하다.

Math.random은 0부터 1사이의 랜덤한 난수를 제공하는데 여기서 이 중간인 0.5를 빼주면 -0.5 ~ 0.5 사이의 난수가 나오게 된다. 

sort는 두수를 비교하게 되는데, 예를 들어 {20,10} 이라고 하면 앞에수에서 뒤에수를 뺐을때 양수가 나오면 앞에수가 더 큰 수라는 뜻이므로 앞뒤가 변하게 된다. 즉 sort(math.random-0.5)는 -0.5~ 0.5의 난수중 양수값을 가지면 자리를 변경하고 마이너스가 나오면 위치를 변경하지 않는다고 한다.

 

막상 이 알고리즘을 아니까 너무 뿌듯하다..

단 이 코드의 단점은 한쪽으로 값이 쏠리는 감이 없지않아 있다고 하니 참고하길 바란다.

 

댓글