알고리즘

프로그래머스 광물 캐기 (JAVA)

박카스마시며코딩 2023. 4. 30. 23:08

https://school.programmers.co.kr/learn/courses/30/lessons/172927

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

import java.util.*;

class Solution {
    
    private static String[] AX = {"diamond","iron","stone"};
    private static int[] LEVEL = {25,5,1};
    
    public int solution(int[] picks, String[] minerals) {
        int size = minerals.length;
        int[] intMinerals = new int[size];
        for(int i = 0 ; i < size ; i++){
            for(int j = 0 ; j < 3 ; j++){
                if(AX[j].equals(minerals[i])){
                    intMinerals[i] = LEVEL[j];
                    break;
                }
            }
        }
        // System.out.println(Arrays.toString(intMinerals));
        int answer = dfs(0,picks,intMinerals,size);
        return answer;
    }
    
    private static int INF = 987654321;
    
    private static int dfs(int depth , int[] picks, int[] minerals, int size){
        if(depth >= size){
            return 0;
        }
        int result = INF;
        for(int i = 0 ; i < 3 ; i++){
            if(picks[i] == 0){
                continue;
            }
            int sum = 0;
            for(int j = depth ; j < Math.min(depth + 5, size) ; j++){
                sum += Math.max(1,minerals[j] / LEVEL[i]);
            }
            picks[i]--;
            result = Math.min(result, dfs(depth + 5,picks,minerals,size) + sum);
            picks[i]++;
        }
        if(result == INF){
            return 0;
        }
        return result;
    }
}