HA Test

jungeundelilahLEE·2020년 10월 17일
0

1. 반복문18번?

function listPrimes(num) {
  let result = '2';
  // 변수result에 string type의 "2"를 할당 (최초의 소수)
  for (let candi = 3; candi <= num; candi += 2) { 
    // 숫자 3부터 2씩 증가하는 반복문 (num에 도달할 때까지)
    let isPrime = true;
    let sqrt = parseInt(Math.sqrt(candi));
    // Math.sqrt는 값에 루트(√ )를 씌운 제곱근
    // parseInt는 해당하는 값을 숫자 타입으로 변경 (특정 진법이 입력되면 그대로, 아니면 10진법)
    // 매개변수가 음수일 경우, NaN 
    // 변수sqrt는 candi에 루트를 씌운 제곱근을 숫자타입으로 변경한 값

    for (let divider = 3; divider <= sqrt; divider += 2) {
      // 숫자 3부터 2씩 증가하는 반복문 (sqrt에 도달할 때까지) // candi확인
      if (candi % divider === 0) {
        // 만일 candi를 divider로 나눈 값이 0일때 // 소수가 아님
        isPrime = false;
        // isPrim은 false 가 되고
        break;
        // 탈출
      }
    }

    if (isPrime) {
      // isPrime이 참일때 // 소수
      result = `${result}-${candi}`;
      // result는 "2"에서 시작하여 candi값을 나열
    }

  }

  return result;
} 

2. underbar suffle

_.shuffle = function (arr) { 
  // arr 배열을 매개변수로 입력
  let arrCloned = arr.slice(); 
  // (slice) : 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환
  // 원본 배열 변화 X
  for (let fromIdx = 0; fromIdx < arr.length; fromIdx++) { 
    // fromIdx라는 변수를 선언하여, arr의 인덱스 0부터 전체 길이까지 반복할 준비
    const toIdx = Math.floor(Math.random() * arr.length); 
    // Math.floor() : 주어진 숫자 이하의 가장 큰 정수 반환
    // Math.random() : 0 이상 1 미만의 구간에서 근사적으로 균일한 부동소숫점 의사난수를 반환
    // toIdx는 랜덤 숫자 생성 (0~)
    let temp = arrCloned[fromIdx]; 
    // temp 변수에 fromIdx번째 요소 할당
    arrCloned[fromIdx] = arrCloned[toIdx]; 
    // fromIdx번째 요소 자리에 toIdx번째 요소의 값을 할당
    arrCloned[toIdx] = temp; 
    // toIdx번째 요소 자리에 temp의 값 할당
  }
  return arrCloned; 
};

작동원리

: suffle 함수의 기능은 인자로 주어진 배열의 element들을 무작위로 섞고, 섞여진 배열을 반환한다.
전체 배열의 길이만큼 반복할 수 있도록 for loop 또는 while 을 사용할 수 있다.
여기서, Math.random 함수를 사용하여 0부터 시작하여 배열의 길이만큼 랜덤하게 섞는 기능을 수행한다.
이 결과를 각 변수를 선언해 값을 옮겨가며, 전체 배열의 길이만큼 반복할 수 있도록 한다.
/ 로또 추첨 / 제비뽑기 등

3. 아래 코드를 reduce를 한 번만 사용한 코드로 변경


const filterMaped = arr.filter(x => x%2 !== 0).map(x => x*2);
console.log(filterMaped) // [2, 6, 10]

// reduce를 사용하기
const filterMaped = arr.reduce((acc,cur) => { if (cur % 2) acc.push(cur*2); return acc; },[]); // [2, 6, 10]

작동원리

reduce함수는 filter와 map을 완전하게 대체할 수 있다.
배열의 각 요소들을 반복하면서 값들을 조합해서(=리듀서 함수를 실행) 특정 값을 만든다. 위에서는 출력된 특정 값을 배열에 넣었다.
acc는 accumulate로 누산기 라고 번역할 수 있다.
cur는 curentValue로 현재 값이라고 번역할 수 있다.
현재 값들에서 2로 나눈 나머지에 2를 곱해 filter를 통해 2를 나눠준 값과, map을 통해 전체에 2를 곱한 값과 같은 결과를 배출했다.

profile
delilah's journey

0개의 댓글