티스토리 뷰
Algorithm/Algorithm Practice
Leetcode 2910. Minimum Number of Groups to Create a Valid Assignment
GrapeMilk 2025. 2. 7. 01:18- 그룹의 수를 최소화 해야하기 때문에 그룹안에 ball을 최대한 많이 넣어야 한다 (그리디)
- 그룹핑을 할 때 나머지가 있으면 나머지로 그룹을 만들 수 있는지 확인해야 한다.
function minGroupsForValidAssignment(balls: number[]): number {
const map = new Map<number, number>();
for (const n of balls) {
map.set(n, (map.get(n) || 0) + 1);
}
let min = balls.length;
for (const v of map.values()) {
min = Math.min(min, v);
}
// size는 min 값부터 시작 (가장 큰 그룹을 만들 수 있는 크기, 그리디)
for (let size = min; size >= 1; --size) {
const numGroups = groupify(map, size);
if (numGroups > 0) return numGroups;
}
return balls.length;
}
function groupify(map: Map<number, number>, size: number): number {
let groups = 0;
const next = size + 1;
for (const value of map.values()) {
const numGroups = Math.floor(value / next);
const remaining = value % next;
if (remaining === 0) {
groups += numGroups;
} else if (numGroups >= size - remaining) {
// 그룹 하나 더 만들 수 있는지 확인
// 더 만들 수 있는지 확인에는 next가 아닌 size를 비교.
groups += numGroups + 1;
} else {
// size로 쪼개질 수 없는 그룹
return 0;
}
}
return groups;
}
'Algorithm > Algorithm Practice' 카테고리의 다른 글
[프로그래머스] 위클리챌린지_5주차_모음사전 (0) | 2021.09.16 |
---|---|
LeetCode - path-sum (javascript) (0) | 2021.07.08 |
[프로그래머스] 짝지어 제거하기 (Javascript) (0) | 2021.06.21 |
프로그래머스 -7 완주하지 못한 선수 (Java) (0) | 2020.03.27 |
BST (0) | 2020.03.08 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- 20200427
- 20200421
- 20201204
- 20200417
- 20200319
- likelion
- 20200504
- 20200624
- 20200804
- 20200330
- 20200413
- chapter7
- 20200403
- 20200425
- 20200503
- 20200420
- 생활코딩리눅스
- 20200622
- 백준
- 20200510
- 20200423
- 20200415
- 20200317
- 20200502
- 20200429
- 20200406
- 20200428
- 20200512
- chapter8
- 20200424
- Total
- Today
- Yesterday