🗃️javascript/프로그래머스

k의 개수(Lv.0)[숫자 ->문자열 저장방법. 초기선언을' '로 ,+로 값들 집어넣기]

하얀성 2023. 1. 12. 10:43
문제 설명

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

입출력 예ijkresult
1 13 1 6
10 50 5 5
3 10 2 0

입출력 예 설명

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 10부터 50까지 5는 15, 25, 35, 45, 50 총 5번 등장합니다. 따라서 5를 return 합니다.

입출력 예 #3

  • 3부터 10까지 2는 한 번도 등장하지 않으므로 0을 return 합니다.

제출 답안

function solution(i, j, k) {
    let newNum = 0;
    while(i<=j){
        if(i.toString().includes(k)){ // k 하나라도 있으면 그 숫자 속아내기
        newNum += i.toString()
        }
        i++
    }
    return newNum.toString().split("").splice(1,newNum.length-1).filter(x => x==k).length
    // 숫자들 가운데 k만 속아내서 그 길이 구하기(반복되는 숫자도 속아내기 ) 
}

 "1234567890" 이런식으로 조건을 만족하는 값들이 합쳐져서 newNum이 나와야 하는데 "01234567890"처럼 자꾸 쓸 때없이 맨앞에 0이 추가되는 바람에 3번과 8번테스트에서 오류가 났다.

그래서 0을 빼주는 splice 작업을 추가로 해주고서야 오류를 잡아낼 수 있었다.

 

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

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

 

위 코드처럼 split의 여집합을 이용했더라면 좋았을것 같다..ㅎㅎ;