상세 컨텐츠

본문 제목

shuffleDeck (카드섞기) - Javascript

Programming/Algorithm

by 쌩우 2019. 7. 10. 09:57

본문

유사난수(pseudorandom number)는 난수를 흉내내기 위해 알고리즘으로 생성되는 값을 가리킨다.

이 때 유사난수를 생성하는 알고리즘을유사난수 생성기(pseudorandom number generator,PRNG)라고 부른다.

유사난수는 알고리즘의 상태에 의해 값이 정해지므로 생성된 수열은 일정한 주기를 가지며, 따라서 난수의 예측 불가능성을 가질 수 없다.

예측 불가능성이 필요한 경우 하드웨어와 같이 외부 신호를 이용하는 하드웨어 난수 생성기를 사용한다.

 

 

(Technically, a computer-shuffled deck will usually be "pseudorandom", not "truly" random.

However, the difference between the two is too small to be detectable by any known test.)

 

 

카드 덱을 셔플하기 위한 알고리즘을 아래와 같이 짜 볼 수 있었다.

 

//먼저 정렬된 덱을 생성해준다
var orderedDeck = function() {
  var suits = [ '♥', '♣', '♠', '♦' ];
  var values = [ 'A', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K' ];
  var deck = [];

  suits.forEach(function(suit) {
    values.forEach(function(value) {
      deck.push(value + suit);
    });
  });

  return deck;
};

//정렬된 덱을 인자로 받아 셔플시킨다
var shuffleDeck = function(deck) {
  let result = [];

  for(let i = deck.length - 1; i >= 0; i--) {
    let makeRandom = Math.floor(Math.random() * deck.length);
    result.push(deck[makeRandom]);
    deck.splice(makeRandom, 1);
  }
return result;
};
  1. 정렬된 덱 생성
  2. 정렬된 덱을 인자로 받아 셔플하는 함수 생성
  3. 셔플된 덱을 담을 빈 배열 result 선언
  4. 덱의 길이에서부터 0이 될 때까지 반복하는 for문
  5. 덱에서 하나를 뽑은 뒤, result에 넣어준다
  6. 기존 정렬된 덱에서 뽑았던 카드를 splice를 사용, 제거해준다

<의사난수>

http://blog.naver.com/PostView.nhn?blogId=msnayana&logNo=220671396721&categoryNo=0&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=search

관련글 더보기

댓글 영역