Open 210-reverof opened 1 year ago
import java.util.*;
class Solution {
int answer = Integer.MAX_VALUE;
String[] ms;
int[][] energy = {{1,1,1}, {5,1,1}, {25,5,1}};
public int solution(int[] picks, String[] minerals) {
ms = minerals;
search(picks, 0, 0);
return answer;
}
private void search(int[] picks, int mIdx, int energySum) {
if (mIdx > ms.length || getLeft(picks) == 0) {
System.out.println(Arrays.toString(picks));
answer = Math.min(answer, energySum);
return;
}
for (int i = 0; i < 3; i++) {
if (picks[i] > 0) {
picks[i]--;
int[] currResult = mining(i, mIdx);
search(picks, mIdx + currResult[1], energySum + currResult[0]);
picks[i]++;
}
}
}
private int[] mining(int pick, int mIdx) {
// 현재부터 5개 에너지
int energySum = 0;
int idx = mIdx;
for (int i = 0; i < 5; i++) {
if (idx == ms.length) return new int[]{ energySum, idx };
System.out.print(pick + "," + getNum(ms[idx]) + "=" + energy[pick][getNum(ms[idx])] + " ");
energySum += energy[pick][getNum(ms[idx])];
idx++;
}
return new int[]{ energySum, idx };
}
private int getLeft(int[] picks) {
return picks[0] + picks[1] + picks[2];
}
private int getNum(String str) {
if (str.equals("diamond")) return 0;
if (str.equals("iron")) return 1;
return 2;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/172927