☕Language: Java
🚨 곡갱이 순서 부여 로직 생성 실패
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.util.Arrays;
class Solution {
static int[] mineralsToInt;
static int[] sumWeight;
public int solution(int[] picks, String[] minerals) {
// minerals: 5
// diamond count sort
// picks 0 1 2
int answer = 0;
calcWeightMinerals(minerals);
calcSumWeight(mineralsToInt);
createOrderPickUse(picks);
Arrays.sort(sumWeight);
return answer;
}
public static int[] calcWeightMinerals(String[] minerals){
mineralsToInt = new int[minerals.length];
for(int i=0; i<minerals.length; i++){
switch(minerals[i]){
case "diamond": mineralsToInt[i]=3; break;
case "iron": mineralsToInt[i]=2; break;
case "stone": mineralsToInt[i]=1; break;
}
}
return mineralsToInt;
}
public static int[] calcSumWeight(int[] mineralsToInt){
sumWeight = new int[(mineralsToInt.length/5)+1];
int sumSubWeight = 0;
int idx=0;
for(int i=0; i<mineralsToInt.length; i++){
sumSubWeight += mineralsToInt[i];
if(i%5==4 || i==(mineralsToInt.length-1)){
sumWeight[idx++] = sumSubWeight;
sumSubWeight = 0;
}
}
return sumWeight;
}
}
|
😮 찾아본 풀이
⭐이중 배열과 포인터 활용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import java.util.*;
class Solution {
public int solution(int[] picks, String[] minerals) {
int answer = 0;
int countPicks = picks[0] + picks[1] + picks[2];
int[][] mineralFatigueTable = new int[minerals.length / 5 + 1][3];
for(int i = 0; i < minerals.length && countPicks > 0; i++) {
switch(minerals[i])
{
case "diamond":
mineralFatigueTable[i / 5][0] += 1;
mineralFatigueTable[i / 5][1] += 5;
mineralFatigueTable[i / 5][2] += 25;
break;
case "iron":
mineralFatigueTable[i / 5][0] += 1;
mineralFatigueTable[i / 5][1] += 1;
mineralFatigueTable[i / 5][2] += 5;
break;
case "stone":
mineralFatigueTable[i / 5][0] += 1;
mineralFatigueTable[i / 5][1] += 1;
mineralFatigueTable[i / 5][2] += 1;
}
if(i % 5 == 4) countPicks--;
}
Arrays.sort(mineralFatigueTable, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[2] < o2[2])
return 1;
else
return -1;
}
});
for(int i = 0, pickIndx = 0; i < mineralFatigueTable.length; i++) {
while(pickIndx < 3 && picks[pickIndx] == 0) pickIndx++;
if(pickIndx == 3) break;
picks[pickIndx]--;
answer += mineralFatigueTable[i][pickIndx];
}
return answer;
}
}
|
1. mineralFatigueTable
- [광물을 5개씩 묶었을 때 몇 번째 묶음인지,곡괭이 별 피로도]
2. Arrays.sort(mineralFatigueTable)
- compare
- 피로도 계산이 가장 큰 돌을 사용했을 때 기준으로 5개 광물 캐기 피로도 묶음을 내림차순 정렬
- pickIdx로 mineralFatigueTable에서 피로도 선택
🔗 소스 코드
GitHub
📚 참고 자료
'Computer > Algorithm_Java' 카테고리의 다른 글
[Algorithm_Java] 시소 짝궁 (Success) (0) | 2023.10.16 |
---|---|
[Algorithm_Java] 뒤에 있는 큰 수 찾기 (Success) (0) | 2023.10.15 |
[Algorithm_Java] 연속된 부분 수열의 합 (Success) (0) | 2023.10.13 |
[Algorithm_Java] 2016년 (Success) (0) | 2023.10.12 |
[Algorithm_Java] 문자열 내 p와 y의 개수 (Success) (1) | 2023.10.11 |