알고리즘: 없는 수 더하기

ssini·2025년 1월 9일
0

문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 원소 ≤ 9
numbers의 모든 원소는 서로 다릅니다.

어떻게 풀어볼까? 🤔

이 문제를 처음 봤을 때, 이렇게 접근하면 좋을 것 같았다:

  1. 우선 0부터 9까지의 전체 숫자 배열이 필요하다.
  2. 그다음 주어진 numbers 배열에서 빠진 숫자들을 찾고,
  3. 마지막으로 그 숫자들을 모두 더하자!

나의 풀이 방법 ✨

function solution(numbers) {
  // 0부터 9까지의 배열을 만들자
  const allNumbers = Array.from({ length: 10 }, (_, i) => i);

  // numbers 배열에 없는 숫자들을 찾아보자
  const missingNumbers = allNumbers.filter((num) => !numbers.includes(num));

  // 찾은 숫자들을 모두 더하면 끝!
  return missingNumbers.reduce((sum, num) => sum + num, 0);
}

코드 살펴보기 📝

  1. Array.from()으로 배열 만들기

    • { length: 10 }으로 길이가 10인 빈 배열을 먼저 만든다.
    • (_, i) => i로 0부터 9까지 숫자를 채워넣는다.
    • 여기서 _는 사용하지 않는 값이라 그냥 스킵한다!
  2. filter()로 없는 숫자 찾기

    • includes()로 numbers 배열에 있는지 확인하고
    • 없는 숫자들만 쏙쏙 골라낸다.
  3. reduce()로 합 구하기

    • 찾은 숫자들을 처음부터 끝까지 더해서
    • 최종 결과를 구한다.

다른 사람의 기발한 풀이 💡

function solution(numbers) {
  return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

이 풀이의 재미있는 점!

  1. 수학적 접근이 돋보인다

    • 0부터 9까지 더하면 45가 되는데
    • 여기서 주어진 숫자들의 합을 빼면...! 없는 숫자들의 합이 나온다.
  2. 장단점을 살펴보면

    • 좋은 점: 코드도 짧고 실행도 빠르다.
    • 아쉬운 점: 0~9가 아닌 다른 범위에선 못 쓴다.

오늘의 배움

  1. 문제를 풀 때는 여러 방향으로 생각해보는 게 좋다.
  2. Array.from()은 정말 유용한 도구다. 나중에 다른 범위의 배열도 쉽게 만들 수 있다.
  3. 항상 더 좋은 방법이 있을 수 있다는 걸 기억하자!

0개의 댓글

관련 채용 정보