Contents
내가 작성한 코드
내가 작성한 코드
import java.util.*;
class Solution {
public int solution(int[] picks, String[] minerals) {
int totalPicks = picks[0] + picks[1] + picks[2];
List<String[]> blocks = new ArrayList<>(); // 5개씩 자른 광물 배열을 담을 리스트
// 곡괭이 수만큼만 광물 5개씩 자르기
for (int i = 0; i < minerals.length && blocks.size() < totalPicks; i += 5) {
// 5개씩 자르기 >> Math.min으로 범위 초과 방지
String[] block = Arrays.copyOfRange(minerals, i, Math.min(i + 5, minerals.length));
blocks.add(block);
}
// 돌 곡괭이로 캤을 때의 피로도 기준으로 내림차순 정렬
// 고급 광물이 많은순으로 정렬됨
blocks.sort((a, b) -> {
return getFatigue(b, 2) - getFatigue(a, 2);
});
int fatigue = 0; // 피로도
// 고급 광물이 많은순으로 곡괭이 사용
for (String[] block : blocks) {
if (picks[0] > 0) {
fatigue += getFatigue(block, 0); // 다이아 곡괭이
picks[0]--;
} else if (picks[1] > 0) {
fatigue += getFatigue(block, 1); // 철 곡괭이
picks[1]--;
} else if (picks[2] > 0) {
fatigue += getFatigue(block, 2); // 돌 곡괭이
picks[2]--;
} else {
break;
}
}
return fatigue;
}
// 각 곡괭이 종류별로 피로도 계산 메서드
private int getFatigue(String[] block, int pickType) {
int sum = 0;
for (String mineral : block) {
switch (pickType) {
case 0: // 다이아 곡괭이
sum += 1;
break;
case 1: // 철 곡괭이
if (mineral.equals("diamond")) {
sum += 5;
} else {
sum += 1;
}
break;
case 2: // 돌 곡괭이
if (mineral.equals("diamond")) {
sum += 25;
} else if (mineral.equals("iron")) {
sum += 5;
} else {
sum += 1;
}
break;
}
}
return sum;
}
}
Share article