코딩테스트 문제풀이/inflearn

[인프런] Node.js / 섹션1 - 기본문제 풀이 / 6. 홀수 (feat. for...of)

sangchu 2022. 7. 24. 17:13

홀수만 뽑아 합과 최솟값 구하기

 

나의 풀이

function solution(arr) {
  let answer = [],
    odd = [],
    oddSum = 0,
    oddMin = Number.MAX_SAFE_INTEGER;

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] % 2 === 1) {
      odd.push(arr[i]);
    }
  }
  for (let i = 0; i < odd.length; i++) {
    oddSum += odd[i];
    if (odd[i] < oddMin) {
      oddMin = odd[i];
    }
  }
  answer.push(oddSum);
  answer.push(oddMin);

  return answer;
}

arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));

먼저 배열을 다 돌아 홀수만 뽑아내 배열로 만들고,

뽑아낸 홀수 배열로 합과 최솟값을 구하였다.

 

 

강사 풀이

function solution(arr) {
  let answer = [];
  let sum = 0,
    min = Number.MAX_SAFE_INTEGER;
  for (let x of arr) {
    // x가 각 배열 인덱스를 받아옴
    if (x % 2 === 1) {
      sum += x;
      if (x < min) {
        min = x;
      }
    }
  }
  answer.push(sum);
  answer.push(min);
  return answer;
}

arr = [12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));

for...of문을 이용하였다.

이는 반복 가능한 객체에 대해 반복한 후, 각 개별 값에 대해 루프를 실행한다.

홀수를 찾고, 그 홀수로부터 합과 최솟값을 바로 구하였다.

 

만약 최솟값 비교할때,

최솟값을 arr[0]를 두고하면 arr[0]이 짝수일 수 있으므로 문제가 생긴다.

따라서 맨 처음 최솟값을 정할 때 Number 내장 객체를 이용하는게 좋다.

 

 

 

for...of - JavaScript | MDN

for...of 명령문은 반복가능한 객체 (Array, Map, Set, String, TypedArray, arguments 객체 등을 포함)에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이 있는 사용자 정의 반복 후크를 호출하는 루프를

developer.mozilla.org