dontGiveMeFive.js (7kyu 32)

Codewars 알고리즘 풀이


Problem

  • In this kata you get the start number and the end number of a region and should return the count of all numbers except numbers with a 5 in it.
    • 5를 제외한 모든 숫자의 개수를 반환한다.
  • The start and the end number are both inclusive.
    • 시작 숫자와 끝 숫자는 모두 포함된다.


Solution 01

function dontGiveMeFive(start, end) {
  let count = 0;
  
  for (let i = start; i <= end; i++) {
    if (i.toString().indexOf(5) === -1) {
      count++;
    }
  }
  return count;
}

dontGiveMeFive(1, 6);  // 5 (1, 2, 3, 4, 6)
dontGiveMeFive(4, 8);  // 4 (4, 6, 7, 8)

toString(): 숫자를 문자열로 변환한다.

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


Solution 02

function dontGiveMeFive(start, end) {
  let result = [];
  
  for (let i = start; i <= end; i++) {
    if (i.toString().indexOf('5') < 0) {
      result.push(i);
    }
  }
  return result.length;
}

dontGiveMeFive(1, 6);  // 5 (1, 2, 3, 4, 6)
dontGiveMeFive(4, 8);  // 4 (4, 6, 7, 8)

push(): 배열의 끝에 새 element를 추가하고, 새로운 길이를 반환한다.


Solution 03

function dontGiveMeFive(start, end) {
  let result = [];
  
  for (let i = start; i <= end; i++) {
    if (i.toString().includes('5') === false) {
      result.push(i);
    }
  }
  return result.length;
}

dontGiveMeFive(1, 6);  // 5 (1, 2, 3, 4, 6)
dontGiveMeFive(4, 8);  // 4 (4, 6, 7, 8)

includes(): 특정 값이 있는지 확인하고, true/false를 반환한다.


Solution 04

function dontGiveMeFive(start, end) {
  let count = 0;
  
  for (let i = start; i <= end; i++) {
    if (!/5/.test(i)) {
      count++;
    }
  }
  return count;
}

dontGiveMeFive(1, 6);  // 5 (1, 2, 3, 4, 6)
dontGiveMeFive(4, 8);  // 4 (4, 6, 7, 8)

test(): 대응되는 문자열이 있는지 검색하고, true/false를 반환한다.