findMissingNum.js (7kyu 51)

Codewars 알고리즘 풀이


Problem

  • You receive some random elements as a space-delimited string.
    • 임의의 element를 공백으로 구분된 문자열로 받는다.
  • Check if the elements are part of an ascending sequence of integers starting with 1, with an increment of 1.
    • element가 1부터 시작해서 1씩 증가하는 정수의 오름차순 sequence인지 확인한다.


Rules

  1. If the elements can form such a sequence, and no number is missing: 0
    • element가 sequence 형태인 경우: 0
    • 숫자가 없는 경우: 0
  2. If there are any non-numeric elements in the input: 1
    • input에 숫자가 아닌 element가 있는 경우: 1
  3. If the elements are part of such a sequence, but some numbers are missing, and n is the lowest of them: n
    • element가 sequence의 일부이지만, 일부 숫자가 누락되고, 누락된 수가 가장 낮은 경우: n


Solution

function findMissingNum(str) {
  if (str === '') return 0;
  
  let arr = str.split('');
  if (!arr.every(Number)) return 1;
  
  arr = arr.sort((a, b) => a - b).map(Number);
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== i + 1) return i + 1;
  }
  return 0;
}

findMissingNum('');         // 0
findMissingNum('1 2 3 a');  // 1
findMissingNum('1 2 3 4');  // 0
findMissingNum('2 3 4 5');  // 1
findMissingNum('2 1 4 5');  // 3
findMissingNum('1 4');      // 2