[js알고리즘]7난장이

Updated:

문제

9개의 숫자타입의 값이 주어질 때 자연수 100 미만의 7개의 숫자만 리턴하는 문제

문제해설

문제에 대한 가설과 나름의 순서를 정했습니다.

  1. 7난장이의 키의 합은 100이다.
  2. 현재는 9명의 키가 있다. (예시 : 20 7 23 19 10 15 25 8 13);
  3. 출력 : 20 7 23 19 10 8 13
  4. 총합: 140 - (빠지는 숫자1 + 빠지는 숫자2) === 100
  5. 빠지는 숫자 이외의 값을 리턴

해결방법

case

const seven = n => {
  for (let i = 0; i < n.length - 1; i++) {
    const sum = n.reduce((acc, cur) => acc + cur); //9개를 합친 숫자결과값
    for (let j = i + 1; j < n.length; j++) {
      if (sum - (n[i] + n[j]) === 100) {
        n.splice(i, 1);
        n.splice(i, 1);
      }
    }
  }
  return n;
};

seven([20, 7, 23, 19, 10, 15, 25, 8, 13]);

풀이해석

문제해설에 기재한것처럼 해당 인자의 총합계를 구해줍니다. 9개 중 7개에 대한 값을 도출하기 위해서는 2개의 값을 찾아야 하니, 이중for문을 통해 순회하는 각각의 2개의 값을 가져옵니다. 가져온 값은 문제의 조건이 100을 넘을 수 없으니, 총합계와 2개의 더한 숫자가 100이 된다는 조건은 이 두 숫자가 빠지면 100이 되니, 해당 하는 숫자들을 splice를 통해 제거를 하면 나머지 7숫자에 대한 배열을 리턴할 수 있습니다.

배운점

최종합에 나머지를 빼는 기초적인 수학적 사고를 기르면 문제에 대한 해석이 빠를 수 있겠다라는 것을 느꼈습니다.