알고리즘
프로그래머스 광물 캐기 (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;
}
}