그리디
, PriorityQueue
https://leetcode.com/problems/ipo/
class Solution {
public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {
PriorityQueue<Project> capitalPQ = new PriorityQueue<>((p1, p2) -> p1.capital - p2.capital);
PriorityQueue<Project> profitPQ = new PriorityQueue<>((p1, p2) -> p2.profit - p1.profit);
for(int i=0; i<profits.length; i++) {
capitalPQ.offer(new Project(profits[i], capital[i]));
}
for(int i=0; i<k; i++) {
while(!capitalPQ.isEmpty() && capitalPQ.peek().capital <= w) {
profitPQ.offer(capitalPQ.poll());
}
if(profitPQ.isEmpty()) {
break;
}
w += profitPQ.poll().profit;
}
return w;
}
static class Project {
int profit;
int capital;
public Project(int profit, int capital) {
this.profit = profit;
this.capital = capital;
}
}
}
최소 힙에 모든 capital 값들을 저장합니다.
for(int i=0; i<profits.length; i++) {
capitalPQ.offer(new Project(profits[i], capital[i]));
}
이후 k번만큼 for문을 돌면서
현재 w로 수행 가능한 프로젝트를 profitPQ에 저장
while(!capitalPQ.isEmpty() && capitalPQ.peek().capital <= w) {
profitPQ.offer(capitalPQ.poll());
}
수행 가능한 프로젝트가 저장된 profitPQ에서 가장 높은 profit을 갖는 프로젝트 수행
w += profitPQ.poll().profit;
1시간 30분