Coding test

[프로그래머스] 없는 숫자 더하기 (Level 1)

Jiwoo 2022. 4. 18. 17:09

문제

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

  • 제한사항

    1 ≤ numbers의 길이 ≤ 9

    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.
       

나의 풀이

function solution(numbers) {
    // 0~9 중 없는 숫자 더한 값 반환
    let list = [0,1,2,3,4,5,6,7,8,9]

    // list에서 numbers의 값 하나씩 지우기
    for (let i = 0; i < numbers.length; i++) {

        list.splice(list.indexOf(numbers[i]), 1)

        }

    // 요소 전체 더하기
    return list.reduce((sum,e) => sum += e, 0);
    }

 

  • 정확도 테스트 결과

 

다른 풀이

  1. 가장 모범적인 풀이

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

     
    1부터 9까지의 배열을 만들어서 numbers와 대조하는 것이 아니라
    for문을 이용해서 정수를 대조한 후, 없다면 하나씩 더해준다.
    가장 깔끔하고 모범적인 풀이같다.
     

  2. 창의적인 풀이

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

     
    보고 깜짝 놀란 풀이ㅋㅋ
    numbers에 중복 숫자가 없기 때문에 합계를 빼주면 원하는 답이 나온다.