(자바스크립트) 프로그래머 – k count

k 번호 – Lv.0

문제 설명

1부터 13까지의 숫자 중 1은 1, 10, 11, 12, 13의 6번 나타납니다.

인수로 정수 i, j, k가 주어지면 complete solve 함수는 k가 i에서 j까지 발생하는 횟수를 반환합니다.

한도

  • 1≤ < 제이 ≤ 100,000
  • 0≤ 케이 ≤ 9

입출력 예시

제이 케이 결과
하나 13 하나 6
10 50 5 5
10 2 0

입/출력 예제 설명

입력/출력 예제 #1

  • 텍스트와 동일합니다.

I/O 예제 #2

  • 10에서 50까지 5는 15, 25, 35, 45, 50의 5번 발생합니다.

    따라서 5를 반환합니다.

I/O 예제 #3

  • 3에서 10까지는 2가 나오지 않으므로 0을 반환합니다.

내 솔루션

첫 번째 솔루션에서는 i에서 j까지 k가 있을 때마다 true를 반환하고 결과 값을 1씩 증가시키는 if 문을 만들었지만 이는 오답으로 이어집니다.

const solution = (i, j, k) => {
  // input i, j, k
  // for문을 돌리기?
  let result = 0;
  for (let num = i; num <= j; num++) {
    if (String(num).includes(String(k))) {
      result++;
    }
  }
  return result;
};

let output = solution(1, 13, 1);
console.log(output); // 5
output = solution(10, 50, 5);
console.log(output); // 5
output = solution(3, 10, 2);
console.log(output); // 0

제목은 i, j, k가 각각 1, 13, 1, 1, 10, 11, 12, 13이면 합이 5가 아니라 십과 일을 각각 11로 세도록 요구한다.

그래서 split(”)으로 문자를 분리하고 중첩된 for 문을 반환하여 해결했습니다.

const solution = (i, j, k) => {
  // input i, j, k
  // for문을 돌리기
  let result = 0;
  for (let num = i; num <= j; num++) {
    const split = String(num).split('');

    for (let num2 = 0; num2 < split.length; num2++) {
      if (split(num2).includes(String(k))) {
        result++;
      }
    }
  }
  return result;
}

남의 솔루션

function solution(i, j, k) {
    let a="";
    for(i;i<=j;i++){
        a += i;
    }

    return a.split(k).length-1;
}

다른 사람의 솔루션을 분석해 봅시다.

너무 간단합니다.

항상 for 문에서 let i = 0그리고 for 문에서 변수를 할당하면 부모로부터 받은 변수를 그대로 사용할 수 있습니다.

문자열 a에 i부터 j까지의 모든 숫자를 더하고 k로 나누고 길이 – 1을 출력하는 것은 꽤 깔끔해 보입니다.

연구

더 읽기 쉬운 방법을 생각하십시오.