자료구조 및 알고리즘/JavaScript Practice

JS Practice) 프로그래머스 : 숫자 빈도수 구하기

Ryomi 2023. 3. 13. 22:57
728x90
반응형

 

 

숫자 빈도수 구하기

문제설명

: 두 자연수 M, N을 받아 N에서 M까지의 자연수에서 0~9의 각 빈도수 값을 배열로 반환

 

제한 사항

N, M은 10,000 이하의 자연수
 
입출력 예

N, M result
129, 137 [1, 10, 2, 9, 1,1,1,1,0,1]
1412, 1918 [100, 614, 101, 101, 189, 201, 201, 201, 201, 119]

 
첫번째 접근
: N부터 M까지의 숫자들을 string으로 만들어 합쳤다.
그리고 요소로 0을 가진 길이 10의 배열을 만들었다.   
string으로 만든 배열을 돌며 arr에 string배열 요소의 인덱스 값에 1을 더해주어 문제를 해결했다. 

function solution(N, M) {
    let arr = new Array(10).fill(0);
    let str = ''
    for(let i=N; i<=M; i++){
        str += String(i)
    }
    str.split('').map(el => arr[Number(el)] =  arr[Number(el)] + 1);
    return arr;
}

 
 
두번째 접근
: map은 새로운 배열을  return 하지만  forEach(이전에 사용한 배열을 사용)는 반환값이 없으므로 메모리 사용에 약간의 차이가 난다. map 대신 forEach를 사용해보았다. 

function solution(N, M) {
    let arr = new Array(10).fill(0);
    let str = ''
    for(let i=N; i<=M; i++){
        str += String(i)
    }
    str.split('').forEach(el => arr[Number(el)] =  arr[Number(el)] + 1);
    return arr;
}

 
 
solution

function answer(s, e) {
    let result = new Array(10).fill(0)
    let num;
    for(let i=s; i<=e; i++){
    	num = i;
        while (num != 0) {
            result[num % 10]++;
            num /= 10;
            num = parseInt(num);
        } 
    }
    return result
}

 

// while 부분 CHK
 

728x90
반응형