본문 바로가기
Algorithm

[프로그래머스] 없는 숫자 더하기 - JavaScript 📝

by Baest 2021. 11. 8.

[링크]

https://programmers.co.kr/learn/courses/30/lessons/86051

 

코딩테스트 연습 - 없는 숫자 더하기

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

programmers.co.kr

 

[문제설명 및 입출력 예]

 

 

[내가 제출한 코드 및 풀이]

🚫 비효율적 코드

 

function solution(numbers) {
    let allNum = [1,2,3,4,5,6,7,8,9,0] // 0-9까지 10자리 숫자 담은 배열 선언
    let answer = 0;                    // return 할 값 담을 변수 
  for(let i=0; i<allNum.length; i++) { // 10자리 숫자의 길이(즉, 10번)만큼 반복
    if(!numbers.includes(allNum[i])) { // allNum의 숫자가 numbers에 없을 경우
      answer += allNum[i];             // answer에 담으면서 합산 
    }
  }
  return answer;                       // 결과값 return 
}

 

💯 개선한 코드

- 굳이 0-9까지 담는 변수를 만들 필요 없었는데... 0-9까지 이미 돌고 있었기 때문에 다시 i를 이용한 코드로 수정함

 

 

function solution(numbers) {
    let answer = 0;            // return 할 값 담을 변수 
  for(let i=0; i<10; i++) {    // 0-9 까지 10번 반복 (즉, 0,1,2,3,4,5,6,7,8,9)
    if(!numbers.includes(i)) { // numbers 에 i가 없을 경우
      answer += i;             // answer에 i값을 담으면서 합산
    }
  }
  return answer;               // 결과값 return 
}

 

 

💯 includes  미사용 코드 (Console.log)

let numbers1 = [1,2,3,4,6,7,8,0];
let numbers2 = [5,8,4,0,6,7,9];

function solution(numbers) {
  let sum = 0;
  let numSum = 0;

  for(let i=0; i<10; i++) {
      sum += i;
  }
  for(let j=0; j<numbers.length; j++) {
    numSum += numbers[j]
  }
  return sum - numSum;

}
console.log('numbers1: ' + solution(numbers1));
console.log('numbers2: ' + solution(numbers2));

 

 

[다른 사람의 코드]

💡 numbers의 숫자를 모두 더하고 0부터 9의 합계인 45에서 빼는 방법을 사용한 코드

- 이 방법은 생각 못했는데, 뭔가 새로운 관점으로 접근해서 신기

function solution(numbers) {
    var answer = 0;
    for(let i=0;i<10;i++){
        answer+=i;
    }
    for(const number of numbers){
        answer-=number;
    }
    return answer;
}

 

💡 사이즈 10의 배열 선언 후 reduce 사용한 코드

- size 10의 배열 선언 후 인덱스 i가 numbers 에 있을 경우 false, 아닐 경우 true 저장하고 마지막에 true 값을 가진 인덱스만 return

function solution(numbers) {
    const arr = new Array(10);
    for(let i = 0; i < 10; i++){
        arr[i] = numbers.indexOf(i) === -1 ? true : false;
    }
    
    return arr.reduce((ans, val, idx) => val ? ans + idx : ans, 0);
}