[JAVA 문제 풀이] 398. 광물 캐기

프로그래머스 (172927)
Stupefyee's avatar
Jul 24, 2025
[JAVA 문제 풀이] 398. 광물 캐기
notion image
 

내가 작성한 코드

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

stupefyee