[js알고리즘]7난장이
Updated:
문제
9개의 숫자타입의 값이 주어질 때 자연수 100 미만의 7개의 숫자만 리턴하는 문제
문제해설
문제에 대한 가설과 나름의 순서를 정했습니다.
- 7난장이의 키의 합은 100이다.
- 현재는 9명의 키가 있다. (예시 : 20 7 23 19 10 15 25 8 13);
- 출력 : 20 7 23 19 10 8 13
- 총합: 140 - (빠지는 숫자1 + 빠지는 숫자2) === 100
- 빠지는 숫자 이외의 값을 리턴
해결방법
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숫자에 대한 배열을 리턴할 수 있습니다.
배운점
최종합에 나머지를 빼는 기초적인 수학적 사고를 기르면 문제에 대한 해석이 빠를 수 있겠다라는 것을 느꼈습니다.