Programmers/Lv2

[프로그래머스/JS] 귤 고르기 (Lv2)

hellosonic 2023. 8. 4. 20:41

문제요약

나의 코드 및 설명

  • 주어진 배열에서 요소의 개수가 적은 순으로 오름차순 정렬하고, 배열의 첫 번째 인덱스부터 shift()한 후, 세트 자료구조로 변환하여 개수를 세주었지만, 시간초과가 발생했다. 
function count(array, find){
    var cnt = 0;
    for (var i = 0; i < array.length; i++){
        if (array[i] == find){
            cnt += 1;
        }
    }
    return cnt;
}

function solution(k, tangerine) {
    var answer = 0;
    var len = tangerine.length;
    var reps = len - k;
    
    tangerine.sort((a,b) => (a-b));
    tangerine.sort((a,b) => (count(tangerine,a) - count(tangerine,b)));
    
    console.log(tangerine);
    
    for(var i = 0; i < reps; i++){
        tangerine.shift();
    }
    
    var set = new Set(tangerine);
    
    answer = set.size;
    
    return answer;
}

다른 코드 및 설명

function solution(k, tangerine) {
    var answer = 0;
    var obj = {};
    tangerine.sort((a,b) => (a-b));
    console.log(tangerine);
    
    // 객체에 배열 요소의 개수 저장
    tangerine.forEach((n) => {
        if ((n in obj) == true){
            obj[n] += 1;
        } else {
            obj[n] = 1;
        }
    });
    
    var kind = Object.values(obj).sort((a,b) => (b-a)); // 객체의 값을 정렬한 배열을 생성한다.
    console.log(kind);
    var sum = 0;
    for (let num of kind){
        answer += 1;
        sum += num;
        if (sum >= k) break;
    }
    
    return answer;
}