[알고리즘 - JavaScript] section 01-8-일곱 난쟁이

ezerone·2022년 5월 21일
0

algorithm

목록 보기
8/10
post-thumbnail

이 문제의 풀이에 앞서 javascript의 reduce 함수에 대해 알고 있으면 문제풀이가 수월해질 수 있다. 김태원 강사님께서 이해하기 쉽게 설명을 해주신 대로 정리를 하자면,

reduce

// 실제 reduce 함수 내부가 이렇게 짜여져 있는 것이 아닌 이해하기 위한 알고리즘이다.
function reduce(predicate, val) {
  let result = val;
  for(let i=0; i<a.length; i++) {
    result = predicate(result, a[i]);
  }
  return result;
}

// 예시
a = [10, 11, 12, 13, 14, 15];
let answer = a.reduce((acc, v) => {
  return acc+v; // return 값이 다시 acc로 간다.
}, 0);
console.log(answer);75

✔ 문제

일과를 마치고 돌아온 난쟁이가 7명이 아닌 9명일 때, 난쟁이 모두가 자신이 진짜 난쟁이라고 주장한다. 일곱 난쟁이의 키의 합이 100이고 아홉 난쟁이의 키가 주어졌을 때, 일곱 난쟁이를 찾는 문제

✌ 접근방식

모든 난쟁이의 키의 합을 구하고 그 합이 일곱 난쟁이가 아닌 난쟁이 2명의 키의 합 + 100 이라면 배열에서 제거하는 방식으로 접근했다.

👓 코드

function solution(arr) {
  let answer = arr;
  
  let sum = arr.reduce((acc, v) => acc + v, 0);
  
  for(let i=0; i<arr.length-1; i++) {
    for(let j=i+1; j<arr.length; j++) {
      if(sum === (arr[i] + arr[j]) + 100) { // (sum - (arr[i] + arr[j])) === 100 과 같음
        arr.splice(i, 1);
        arr.splice(j-1, 1);
      }
    }
  }
  return answer;
}

let arr=[20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));[20, 7, 23, 19, 10, 8, 13]
profile
재미도 재능

0개의 댓글