Lv.2 첫 번째 문제다.
이제부턴 효율성 까지 고려된 코드를 작성할 필요가 있다.
시간이 된다면 시간복잡도에 대해서도 공부한 뒤 블로그에 정리하도록 하겠다.
언어는 javascript
문제는 [Link] 프로그래머스 에서 풀 수 있다.
문제 : 정수 배열과 정수k가 주어질 때 정수 배열에서 k개의 값을 모았을 때 서로다른 정수의 개수의 최소값을 리턴
const solution = (k, tangerine) => {
const obj = {};
// 배열의 값 : 값의 개수 쌍을 담을 객체 생성
// 배열을 순회한다.
tangerine.forEach((n) => {
// obj[n] 값이 있으면 1을 더한 값을
// obj[n] 값이 없으면 1을 넣어준다.
obj[n] = ++obj[n] || 1;
});
// 결과 ex) { '1': 1, '2': 2, '3': 2, '4': 1, '5': 2}
const nums = Object.values(obj).sort((a, b) => (b-a));
// 객체 정적 메서드 Object.values()를 사용해 value(개수)만을 추출하고 내림차순으로 정렬
// 가장 큰 수부터 차감해야 한다.
// nums = [2, 2, 2, 1, 1]
let result = 0;
// 결과 변수 선언
while(k > 0){
// 타겟넘버를 배열의 큰 값부터 감소시키며 반복한다.
k = k - nums[result];
// 배열의 값 하나씩 처리하면 한가지 크기의 귤이 담긴다.
result = result+1;
// 귤의 종류 수를 증가시킨다.
}
return result;
// 결과 리턴
}
for, while 등 반복문 사용을 최소화 하며 코드를 작성할 필요가 있다.