inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문

공 뽑기(피셔 예이츠 셔플)

무작위 공 뽑기 관련해서 질문 있습니다.

355

ehdns1133

작성한 질문수 5

0

const candidate = Array(45).fill().map((el, i) => i + 1);

const suffle = [];

while (candidate.length > 0) {
  const random = Math.floor(Math.random() * candidate.length); // 무작위 인덱스 뽑기
  const spliceArray = candidate.splice(random, 1); 
  const value = spliceArray[0];
  suffle.push(value); 
}

위의 코드는 0부터 candidate 배열의 길이 -1 사이에서 무작위로 하나의 값을 가져오는 것으로 이해를 하였습니다. 이렇게 되면 뽑았던 값을 또 뽑을 가능성이 존재하는 것 아닌가요 ?

또한 1에서 45 사이의 숫자를 무작위로 하나로 뽑아야 했을 때 random()함수 뒤에 candidate.length를 곱하는 것이 아니라 Math.random()*45 +1 이렇게 해야 하는 것이 아닌가 라고 생각이 듭니다.

 

왜 candidate.length가 오는지 궁금합니다.

javascript

답변 1

0

유승완

Math.random()*45 +1 식으로 무작위 인덱스를 뽑아내면, candidate 배열은 숫자를 뽑을 때 마다 길이가 줄어들게 되는데 고정으로 45를 곱해주기 때문에 candidate 배열에 접근할 때 배열의 길이를 초과해서 접근하는 문제가 생길 수 있어요. 이미 공을 3번 뽑아서 candidate 배열의 길이는 45 - 3 = 42인데 뽑는 인덱스가 45가 될 수도 있는거죠.

그래서 candidate.length를 곱해줘야 숫자를 뽑아서 배열의 길이가 줄어들어도, 줄어든 배열의 길이에 맞춰서 인덱스를 뽑을 수 있어요.

 

0

제로초(조현영)

대신 잘 설명해주셔서 감사합니다!

splice로 공을 뽑을 때마다 candidate의 length가 45, 44, 43... 이렇게 1씩 줄어듭니다.

0

ehdns1133

그럼 45라는 숫자는 젤 처음 말곤 나올 수 없는건가요?

0

제로초(조현영)

아뇨 총 개수가 45->44->43으로 가는 거지

어떤 상황에서든 숫자 45는 언제든지 뽑을 수 있습니다. 한 번 그려가면서 해보세요.

자바스크립트 입문 강의 재생 안됨

0

76

2

쿵쿵따 조건문 질문입니다.

0

72

2

렛츠가릿 자바스트립트와 공유가 되나요

0

77

1

수강을 하기 전 공부순서에 관한 질문이 있습니다.

1

100

2

안녕하세요

0

101

2

1~45 필터링하는 코드에서 find대신 some써주는게 나을거같습니다.

1

76

2

고차 함수 작성법과 수업 진도 관련한 질문

0

82

3

break와 continue 9:55 내 continue 구문 질문

0

153

2

옵셔널 체이닝 적당한 깊이는 어느 정도인가요?

0

121

2

로또 추첨기 중 입력값을 검사할 때

0

137

2

2-14.else,else if,switch 관련 질문입니다.

0

109

2

가위바위보 이미지(rsp.png)가 안보여요

0

264

3

Math.random() 에 9을 곱하는 이유

0

174

4

클로저 관련해서 질문있습니다.

1

188

2

유튜브 댓글 보고 왔습니다!- 퀴즈 중복된 숫자 검사 for 문

0

246

1

event.target.textContent관련 질문

0

273

2

객체 참조 관련 질문

0

179

1

-2+ -2 = -4 음수 더하기 음수 - 셀프체크 계산기

0

465

1

별찍기 마름모 문제입니다.

0

351

2

숙제 질문

0

217

1

5강 async/await으로 가독성 높이기에서

0

231

1

야구게임 관련 질문입니다

0

186

1

쿵쿵따, 계산기에서 변수 선언

0

181

1

지뢰 힌트 사라짐(대괄호)

0

167

1