주어진 배열에서 요소의 개수가 적은 순으로 오름차순 정렬하고, 배열의 첫 번째 인덱스부터 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;
}