inblog logo
|
stupefyee
    알고리즘문제풀기

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

    프로그래머스 (172927)
    Stupefyee's avatar
    Stupefyee
    Jul 24, 2025
    [JAVA 문제 풀이] 398. 광물 캐기
    Contents
    내가 작성한 코드
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/172927
    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
    Contents
    내가 작성한 코드

    stupefyee

    RSS·Powered by Inblog