findDeletedNum.js (7kyu 82)

Codewars 알고리즘 풀이


Problem

  • An ordered sequence of numbers from 1 to N is given.
    • 1부터 N까지 정렬된 일련의 수를 제공한다.
  • One number might have deleted from it, then the remaining numbers were mixed.
    • 한 숫자가 삭제되어 있고, 나머지 숫자는 섞여 있다.
  • Find the number that was deleted.
    • 삭제된 숫자를 반환한다.
  • If no number was deleted from the array and no difference with it, your function should return the int 0.
    • 숫자가 삭제되지 않았거나 차이가 없는 경우, 정수 0을 반환한다.


Solution 01

function findDeletedNum(arr, mixArr) {
  for (let i = 0; i < arr.length; i++) {
    if (mixArr.indexOf(arr[i]) === -1) {
      return arr[i];
    }
  }
  return 0;
}

findDeletedNum([1, 2, 3, 4], [4, 1, 3]);     // 2
findDeletedNum([1, 2, 3, 4], [4, 1, 3, 2]);  // 0

indexOf(): 주어진 값이 처음으로 나타나는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.


Solution 02

function findDeletedNum(arr, mixArr) {
  let sumArr = arr.reduce((a, b) => a + b, 0);
  let sumMixArr = mixArr.reduce((a, b) => a + b, 0);
  
  return sumArr - sumMixArr;
}

findDeletedNum([1, 2, 3, 4], [4, 1, 3]);     // 2
findDeletedNum([1, 2, 3, 4], [4, 1, 3, 2]);  // 0

reduce(): 배열을 하나의 값으로 줄이고, 그 값을 반환한다.


Solution 03

function findDeletedNum(arr, mixArr) {
  return arr.filter(i => mixArr.indexOf(i) === -1)[0] || 0;
}

findDeletedNum([1, 2, 3, 4], [4, 1, 3]);     // 2
findDeletedNum([1, 2, 3, 4], [4, 1, 3, 2]);  // 0

filter(): 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.