본문 바로가기
알고리즘

[프로그래머스][JS] Lv.1 없는 숫자 더하기

by codnjs779 2022. 10. 11.

문제 설명

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

 

제한사항
  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.
입출력 예
[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

입출력 예 #1

  • 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.

입출력 예 #2

  • 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.

 

 

---

엄청 간단한 문제였다. 

간단한 방법이 생각나기 전에 시도하려던 방법은 2가지가 있었다.

1. [1,2,3,4,5,6,7,8,9] 배열을 선언하고 배열 vs 배열 비교 하기

2. for 문 돌려서 배열에서 1 ~ 9 사이에 없는 수 리턴해서 합 구하기

둘중에 뭐로 풀어볼까 생각하다가 간단한 방법이 생각났다. 

 

1 ~ 9 합은 45로 항상 같으니까, 제시된 배열의 합을 구한 다음, 45 - numbers 배열 계산을 하면 될 듯 했다.

 

코드로 구현하면 아래와 같다. 

const solution = (numbers) => {
    let newSum = numbers.reduce((a,b) => {
        return  a + b
    })
    return ( 45 - newSum)

}

 

* 다른 사람 코드 *

이 경우는 총 합이 45로 고정되어 있어서 가능한 방법이었다. 만약 배열이 매우 길어서 합을 알기 어려워 질 수도 있는 경우를 생각하면? 다른 방법으로도 풀어볼 수 있다. includes 함수를 for 문과 함께 사용하는 방법이다. 

 

const solution = (numbers) => {
    let ans = 0;
    for(let i = 0; i <= 9; i++) {
        if (!numbers.includes(i))
            ans += i;
    }
    return ans
}