-
Array 채우기와 랜덤 추출!Eureka! 2019. 10. 28. 22:37
ZeroCho님 강좌를 보다가 생각보다 괜찮은 것들 그리고 나중에 쓸만한 것이 있어서 글 남깁니다.
1. 1차원 배열을 만들고 값을 숫자로 채워 넣는 경우!
// 배열 값 채우기! /* 1. Array()로 1차원 배열 생성 2. fill()로 undefined로 채움 3. map으로 갯수만큼 반복하면서 index를 이용해서 1부터 값 할당. */ let numArr = Array(45).fill().map((e, index) => index + 1);
2. 1차원 배열에 있는 값들 중에 원하는 갯수만큼 랜덤으로 추출하는 법
// 랜덤 번째 값을 원하는 갯수만큼 추출 /* 1. randomNums를 선언한다. ( 랜덤번째 값을 담을 배열 ) 2. while을 numArr.length 값을 비교하면서 수행.(splice를 사용해서 특정 index의 값을 원하는 갯수만큼 추출하면 원 배열에서는 해당 값이 사라지기 때문입니다. 즉, 원소가 줄어들기 때문에 numArr의 length를 비교해서 전체 갯수 - 추출을 원하는 갯수를 비교 값으로 사용합니다. 현재는 전체 45개 원하는 수 15개로 45 - 15 = 30 이 사용되었습니다.) 3. Math.floor : 버림(4.5 -> 4) , Math.random() : 0 이상 ~ 1 미만 사이의 랜덤 값 두 Math 함수를 활용해서 0 ~ numArr.length - 1으로 되기 때문에 궁극적으로 랜덤한 index를 접근하여 첫번째 값을 추출 4. randomNums에 push 하여 값 저장. 5. 최종 결과로 randomNums 값 확인. */ let randomNums = []; while( numArr.length > 30 ) { // 추출을 원하는 갯수 let target = numArr.splice(Math.floor(Math.random() * numArr.length), 1)[0]; randomNums.push(target); } console.log(randomNums); // (15) [3, 24, 28, 37, 35, 11, 32, 26, 8, 10, 29, 30, 36, 23, 17]
위 코드를 보면서, 'splice로 그냥 한방에 갯수만큼 가져오는건 어떨까?' 라는 생각도 해보고,
원 배열을 손대지 않으면서 어떻게 처리해볼까라는 고민도 해보고, 여러 생각을 많이 해봤습니다.
3. 추가 ( 19. 11.04 )
// 보통 코딩테스트 볼 때 메모를 이용한다던가. 동적계획법을 쓴다던가 할 때 빠른 초기화용 const row = 10, col = 10; const dp = Array(row).fill().map(e => new Array(col).fill(-1)); /* -1, -1, -1 ..... -1 ... ... -1, -1, -1 ..... -1 */
우선은 이대로 머릿속에 그려둬야겠어요 : )
'Eureka!' 카테고리의 다른 글
Volta??? (0) 2023.10.05 [Testing-library] render.. ? append? (0) 2022.03.30 [ES6] const ? 불변아니였어? (0) 2019.10.31 var vs. let vs. const ? (0) 2019.10.01