알고리즘/leetcode
621. Task Scheduler
유이얼
2022. 8. 23. 00:42
class Solution {
public:
int leastInterval(vector<char>& tasks, int n) {
vector<int> v(26);
int freq = 0;
for (auto c : tasks)
freq = max(++v[c - 'A'], freq);
int count = 0;
for (int i = 0; i < v.size(); ++i)
if (v[i] == freq) count++;
int with_idle = (n + 1) * (freq - 1) + count;
int no_idle = tasks.size();
return max(with_idle, no_idle);
}
};
max frequency tasks를 제외한 tasks에 대해,
- (n + 1) 슬롯에서의 idle time을 채우거나 남는다면 : tasks.size
- idle time을 채우지 못한다면 : (n + 1) * (freq - 1) + count
(priority_queue를 활용한 greedy 방식이 일반적인 풀이)