ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.