-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
무작위 공 뽑기 관련해서 질문 있습니다.
23.11.04 00:39 작성 23.11.04 00:41 수정 조회수 247
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가 오는지 궁금합니다.
답변을 작성해보세요.
0
유승완
2023.11.04
Math.random()*45 +1 식으로 무작위 인덱스를 뽑아내면, candidate 배열은 숫자를 뽑을 때 마다 길이가 줄어들게 되는데 고정으로 45를 곱해주기 때문에 candidate 배열에 접근할 때 배열의 길이를 초과해서 접근하는 문제가 생길 수 있어요. 이미 공을 3번 뽑아서 candidate 배열의 길이는 45 - 3 = 42인데 뽑는 인덱스가 45가 될 수도 있는거죠.
그래서 candidate.length를 곱해줘야 숫자를 뽑아서 배열의 길이가 줄어들어도, 줄어든 배열의 길이에 맞춰서 인덱스를 뽑을 수 있어요.
조현영
지식공유자2023.11.04
대신 잘 설명해주셔서 감사합니다!
splice로 공을 뽑을 때마다 candidate의 length가 45, 44, 43... 이렇게 1씩 줄어듭니다.
답변 1