https://school.programmers.co.kr/learn/courses/30/lessons/138476
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return - 주어진 자료는 무엇인가?
k: 경화가 한 상자에 담으려는 귤의 개수
tangerine: 귤의 크기를 담은 배열 - 조건은 무엇인가?
귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하라
2. 계획
- 귤의 종류에 따른 개수를 구한다.
- 개수가 많은 순으로 내림차순 정렬한다.
- 정렬한 배열을 순회하면서 귤을 담을 배열에 차례대로 넣어준다.
- 이때, 귤 종류를 센다.
- 귤의 종류가 k개를 넘어선다면 순회를 멈춘다.
- 귤을 담은 배열의 길이를 리턴한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (k, tangerine) => {
const tangerineKind = tangerine.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc
}, {});
const tangerineSort = Object.values(tangerineKind).sort((a, b) => b - a);
let minTangerines = [];
let sum = 0;
for (let i = 0; i < tangerineSort.length; i++) {
sum += tangerineSort[i]
minTangerines.push(tangerineSort[i])
if (sum >= k) break;
}
return minTangerines.length;
};
test('choose tangerine', () => {
expect(solution(6, [1, 3, 2, 5, 4, 5, 2, 3])).toEqual(3);
expect(solution(4, [1, 3, 2, 5, 4, 5, 2, 3])).toEqual(2);
expect(solution(2, [1, 1, 1, 1, 2, 2, 2, 3])).toEqual(1);
});
4. 반성
- 조금 더 코드를 다듬어 보았다.
const solution = (k, tangerine) => {
const tangerineKind = tangerine.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc
}, {});
const tangerineSort = Object.values(tangerineKind).sort((a, b) => b - a);
let sum = 0;
for (const it of tangerineSort) {
sum++;
if (k > it) k -= it;
else break;
}
return sum;
};
'코테연습' 카테고리의 다른 글
173. 연속 부분 수열 합의 개수 Javascript (0) | 2023.01.06 |
---|---|
172. 할인행사 Javascript (0) | 2023.01.05 |
170. 문자열 나누기 Javascript (0) | 2023.01.03 |
167. n^2 배열 자르기 Javascript (0) | 2022.09.22 |
166. 124 나라의 숫자 Javascript (0) | 2022.09.22 |
댓글