문제 - 826
작업자 즉 worker는 자신의 능력을 나타내므로 능력이 difficulty보다 높을 수 없다
즉 worker[i] < difficulty[i] 그래서 최대한의 이득을 볼 수 있는 경우의 값을 출력하는 것이다.
그리디로 접근을 해야된다.
처음에 difficulty와 profit을 List에 담은 다음 difficulty의 오름차순 정렬을 해준다.
worker를 탐색하면서 최대로 뽑을 수 있는 이득을 갱신하여 결과에 더해준다.
import java.util.*;
class Solution {
public int maxProfitAssignment(int[] difficulty, int[] profit, int[] worker) {
int ans = 0;
List<int []> jobs = new ArrayList<>();
for(int i=0;i<profit.length;i++)
{
jobs.add(new int[]{difficulty[i],profit[i]});
}
Collections.sort(jobs,(a,b) -> Integer.compare(a[0],b[0]));
Arrays.sort(worker);
for(int i=0,j=0,maxP =0; i <worker.length;i++)
{
while(j<jobs.size() && jobs.get(j)[0] <= worker[i])
{
maxP = Math.max(maxP, jobs.get(j)[1]);
j++;
}
ans += maxP;
}
return ans;
}
}