[프로그래머스] k의 개수

이아현·2023년 6월 2일
0

코딩테스트

목록 보기
8/31
post-thumbnail

✅ 문제 설명

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

✅ 제한 사항

  • 1 ≤ i < j ≤ 100,000
  • 0 ≤ k ≤ 9

✅ 첫 번째 풀이

function solution(i, j, k) {
    var answer = 0;
    
    for (let l=i; l<j+1; l++) {
        var str_num = String(l).split("")
        console.log(str_num)
        if (String(k) in str_num) {
            answer += 1;
        }
        console.log(k)
    }
    return answer;
}
  • 이렇게 푸니까 첫 번째부터 카운트되지 않았다.
  • in연산자를 용도에 맞지 않게 사용하고 있었다.
    • in연산자는 명시된 속성이 명시된 객체에 존재하는지 여부를 판단하는 메서드!
  • 특정 요소가 배열에 포함되어 있는지 확인할 수 있는 메서드는 includes를 사용해야한다.

✅ 두 번째 풀이

function solution(i, j, k) {
  var answer = 0;

  for (let l = i; l < j + 1; l++) {
    var str_num = String(l).split("");
    console.log(str_num);
    if (str_num.includes(String(k))) {
      console.log(true);
      answer += 1;
    }
    console.log(k);
  }
  return answer;
}
console.log(solution(1, 13, 1));
  • in연산자 대신에 includes메서드를 사용하기는 하지만 포함 여부만 확인하고 answer에 + 1하기 때문에 11처럼 1이 두개가 되는 경우에는 한 개로만 판단해서 답이 되지 않는다.

✅ 세 번째 풀이 (통과)

function solution(i, j, k) {
  var answer = 0;

  for (let l = i; l < j + 1; l++) {
    var str_num = String(l).split("");
    for (let m = 0; m < str_num.length; m++) {
      if (str_num[m] === String(k)) {
        answer += 1;
      }
    }
  }
  return answer;
}
  • 해당 숫자를 str_num로 숫자를 하나씩 문자로 바꾸어 배열로 저장해서 for문을 돌며 k값을 찾았다.
profile
PM을 지향하는 FE 개발자 이아현입니다 :)

0개의 댓글