[프로그래머스] 230921 코딩테스트 연습

    SMALL

    1. 약수의 개수와 덧셈

    function solution(left, right) {
        var answer = 0;
        const cnt_arr = Array.from({length: right-left+1}, () => 0);
        // 1과 자기 자신은 포함 > 2를 default 값으로
        
        // 약수 개수 구하기
        for(let i = left; i<=right; i++) {
            for(let j=1; j<=Math.sqrt(i); j++) {
                if (i%j==0) {
                    // 특정 숫자의 제곱이 left 일 때, 중복 값 제외하고 넣음.
                    if(Math.pow(j, 2) == i) {
                        cnt_arr[i-left] += 1;
                    } else {
                        cnt_arr[i-left] += 2;
                    }
                }
            }
        }
        
        // 약수의 개수에 따라 값 계산
        for(let s = left; s<=right; s++) {
            if (cnt_arr[s-left]%2==0) {
                answer += s;
            } else {
                answer -= s;
            }
        }
        
        return answer;
    }
    
    // * 제곱근이 정수면 약수의 개수가 홀수다.

     

    2. k번째 수

    function solution(array, commands) {
        var answer = [];
        let start = 0;
        let end = 0;
        let idx = 0;
        let res = 0;
        
        for(let i=0; i<commands.length; i++) {
            start = commands[i][0]-1;
            end = commands[i][1];
            idx = commands[i][2]-1;
            res = array.slice(start, end).sort(function(a, b) {
                return a-b;
            });
            answer.push(res[idx]);
        }
        
        return answer;
    }

     

    3. 두 개 뽑아서 더하기

    function solution(numbers) {
        var answer = [];
        let arr = [];
        let res = 0;
        
        for(let i=0; i<numbers.length; i++) {
            numbers.slice(i+1).forEach( data => {
                res = numbers[i]+data;
                if(!arr.includes(res)) {
                    arr.push(res);
                }
            });
        }
        
        answer = arr.sort(function (a,b) {return a-b});
        
        return answer;
    }

     

    4. 과일 장수

    function solution(k, m, score) {
        var answer = 0;
        let len = parseInt(score.length/m);
        let arr = [];
        let start = 0;
        let end = m;
        
        // 내림차순 정렬
        score.sort(function(a,b) { return b-a });
        for(let i=0; i<len; i++) {
            arr = score.slice(start, end);
            answer += Number(arr[m-1])*m; // 각 배열의 최솟값 추출
            start += m;
            end += m;
        }
        
        return answer;
    }

     

     

     

    728x90

    댓글