https://school.programmers.co.kr/learn/courses/30/lessons/172927
마인이 가지고 있는 곡갱이
돌 , 철 , 다이아
-> 더이상 사용할 곡갱이가 없거나 광물 다캐면 끝
picks에 현재 가지고있는 곡갱이 수
-> 다이아 개수 , 철 개수 , 돌 갯수
다이아곡갱이 : 무조건 피로도 1
철 곡갱이 : 다이아 5, 철,돌 : 1
돌곡갱이 : 25 5 1
무조건 5개의 광물을 연속으로 캔다.
-> 5개가 한묶음
5개씩 묶었을때 가장 피로도가 큰놈 -> 다이아 곡갱이로 캔다
가중치
다이아 25
철 5
돌 1
각 그룹별 계산하고 내림차순 정렬
-> 다이아 곡갱이부터 사용시작 -> 5묶음 계산 끝나면 정답에 더해주기
돌맹이를 5개씩 나눈다.
LIST< Group > 을 만든다.
Group이있어야하겠네요
-> Group 클래스
: 가중치
LIST에 현재 돌맹이 넣어두기
처음에 간과했던점 : 곡갱이의 개수가 한정되있기 때문에 뒷부분을 아예 못들어가는 것을 처음에 간과했다가 곡갱의 전체 개수를 체크해서 뒷부분을 체크하지 않고 진행하니까 테스트케이스를 전부 통과했습니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Solution {
public int solution(int[] picks, String[] minerals) {
int answer = 0;
//그룹 리스트 정리용
List<Group> GroupList = new ArrayList<>();
int dia = picks[0];
int iron = picks[1];
int rock = picks[2];
int all_pick = dia + iron + rock;
//미네랄 그룹 나누기
for (int idx = 0; idx < minerals.length; idx += 5) {
if(GroupList.size() >=all_pick)
break;
Group group = new Group();
group.Lists = new ArrayList<>();
for (int check = idx; check < idx + 5; check++) {
if(minerals.length <= check)
break;
switch (minerals[check]) {
case "diamond":
group.sum += 25;
group.Lists.add(minerals[check]);
break;
case "iron":
group.sum += 5;
group.Lists.add(minerals[check]);
break;
default:
group.sum += 1;
group.Lists.add(minerals[check]);
}
}
GroupList.add(group);
}
//내림차순 정리
Collections.sort(GroupList, (o1, o2) -> o2.sum - o1.sum);
for (int idx = 0; idx < GroupList.size(); idx++) {
//다이아곡갱이는 어쩌피 전부 1임
if (dia != 0) {
dia -= 1;
answer += GroupList.get(idx).Lists.size();
//철곡갱이는 다이아만 5 그외 전부 1
} else if (iron != 0) {
iron -= 1;
for (int checking = 0; checking < GroupList.get(idx).Lists.size(); checking++) {
if (GroupList.get(idx).Lists.get(checking).equals("diamond")) {
answer += 5;
} else {
answer += 1;
}
}
//돌곡은 다이아 25 철 5 돌 1
} else if (rock != 0) {
rock -= 1;
for (int checking = 0; checking < GroupList.get(idx).Lists.size(); checking++) {
if (GroupList.get(idx).Lists.get(checking).equals("diamond")) {
answer += 25;
} else if (GroupList.get(idx).Lists.get(checking).equals("iron")) {
answer += 5;
} else {
answer += 1;
}
}
//곡갱이 다쓰면 끝
} else
break;
}
System.out.println(answer);
return answer;
}
class Group {
int sum;
List<String> Lists;
}
}