import java.util.*;
class Solution {
public int solution(int[] picks, String[] minerals) {
int answer = 0;
int idx = 0;
int pickCnt = picks[0] + picks[1] + picks[2];
ArrayList<MineralCnt> map = new ArrayList<>();
while(idx<minerals.length && idx < pickCnt*5){
if(idx % 5 == 0){
int endIdx = Math.min(idx + 4, minerals.length-1);
int diaCnt = 0;
int ironCnt = 0;
int stoneCnt = 0;
for(int i=idx;i<=endIdx;i++){
if(minerals[i].equals("diamond")) diaCnt++;
else if(minerals[i].equals("iron")) ironCnt++;
else if(minerals[i].equals("stone")) stoneCnt++;
}
map.add(new MineralCnt(diaCnt,ironCnt,stoneCnt));
}
idx++;
}
Collections.sort(map);
int nowPick = -1;
for(int i=0;i<map.size();i++){
MineralCnt m = map.get(i);
if(picks[0] > 0){
picks[0]--;
answer += (m.diaCnt + m.ironCnt + m.stoneCnt);
}
else if(picks[1] > 0){
picks[1]--;
answer += ((m.diaCnt*5) + m.ironCnt + m.stoneCnt);
}
else if(picks[2] > 0){
picks[2]--;
answer += ((m.diaCnt*25) + (m.ironCnt*5) + m.stoneCnt);
}
else break;
}
// for(int i=0;i<map.size();i++){
// MineralCnt m = map.get(i);
// System.out.println("dia : "+m.diaCnt+" iron : "+m.ironCnt+" stone : "+m.stoneCnt);
// }
return answer;
}
private static class MineralCnt implements Comparable<MineralCnt>{
int diaCnt;
int ironCnt;
int stoneCnt;
public MineralCnt(int diaCnt, int ironCnt, int stoneCnt){
this.diaCnt = diaCnt;
this.ironCnt = ironCnt;
this.stoneCnt = stoneCnt;
}
@Override
public int compareTo(MineralCnt m) {
if(this.diaCnt > m.diaCnt) return -1;
else if(this.diaCnt < m.diaCnt) return 1;
else{
if(this.ironCnt > m.diaCnt) return -1;
else if(this.ironCnt < m.diaCnt) return 1;
else return 0;
}
}
}
}

