[PS] 99ํด๋ฝ ์ฝํ ์คํฐ๋ 39์ผ์ฐจ TIL (๊ด๋ฌผ ์บ๊ธฐ)
ํ๊ทธ: 99ํด๋ฝ, PS, TIL, ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ, ์ฝ๋ฉํ ์คํธ์ค๋น, ํญํด99
์นดํ ๊ณ ๋ฆฌ: PS
๋ฌธ์
์ค๋ช
์ธ ์ข ๋ฅ์ ๊ณก๊ดญ์ด๊ฐ ์๊ณ , ๊ด๋ฌผ์ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ฐ ๊ณก๊ดญ์ด์ ํผ๋ก๋๊ฐ ๋ค๋ฅด๊ฒ ์ฑ ์ ๋์ด ์๋ค. ๊ฐ ๊ณก๊ดญ์ด์ ๊ฐฏ์๊ฐ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๊ณ ๊ด๋ฌผ์ ์ข ๋ฅ๊ฐ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋ ๊ณก๊ดญ์ด๋ฅผ ๋ชจ๋ ์๋ชจํ๊ฑฐ๋, ๊ด๋ฌผ์ ๋ชจ๋ ์บ๋ ๊ฒฝ์ฐ์ ํผ๋ก๋ ์ต์๊ฐ์ ๋ฐํํ๋ ๋ฌธ์
ํ์ด
- ๊ทธ๋ฃนํ :
ํ ๊ณก๊ดญ์ด ๋น ์ด๋ค ๊ด๋ฌผ์ด ๋์๋ ๊ฐ์ 5๋ฒ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ๊ด๋ฌผ์ 5๊ฐ์ฉ ๊ทธ๋ฃน์ ๋๋ ๊ฐ ๊ทธ๋ฃน์์์ ๊ฐ์ฅ ํจ์จ์ ์ธ(ํผ๋ก๋๊ฐ ๋ฎ์) ๊ณก๊ดญ์ด๋ฅผ ์ ํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ฒซ๋ฒ์งธ ์์์์ ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ฃนํ ํ ์ ์๋ค.
1 2
group1 = ["diamond", "diamond", "diamond", "iron", "iron"] group2 = ["diamond", "iron", "stone"]
-
๊ฐ์ค์น ๊ณ์ฐ : ์ด์ ์ ๊ทธ๋ฃน๋ค์ ์ํํ ๊ณก๊ดญ์ด๋ง ์ ํํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ ์ ํ๊ธฐ์ค์ ๊ด๋ฌผ ๊ฐ์ค์น๊ฐ ์ ์ผ ํฐ ๊ทธ๋ฃน์ ๊ฐ๋ ฅํ ๊ณก๊ดญ์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๊ฐ ๊ทธ๋ฃน์ ๊ด๋ฌผ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๋ฌธ์ ์์ ์ฃผ์ด์ง๋ ๊ณก๊ดญ์ด ํผ๋ก๋๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ฐฐ์ด์ ๋ง๋ ๋ค, ๊ทธ๋ฃน๋ง๋ค
๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด๊ฐ ์๋ชจํ๋ ํผ๋ก๋, ์ฒ ๊ณก๊ดญ์ด๊ฐ ์๋ชจํ๋ ํผ๋ก๋, ๋ ๊ณก๊ดญ์ด๊ฐ ์๋ชจํ๋ ํผ๋ก๋
๋ฅผ ํฉ์ฐํดsum
์ ์ ์ฅ์์ผ ๋๋ค. 5๊ฐ์ฉ ๋ช๊ฐ์ ๊ทธ๋ฃน์ด ๋์ค๋์ง ํ์ธํ๊ธฐ ์ํด 5๋ก ๋๋ ๋ชซ ๋งํผ ๋ฐ๋ณต์ ํ๊ณ , ๋๋จธ์ง ๊ด๋ฌผ๋ค์ ๋ํด์๋ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํด์ ์ ์ฅํ๋ค. - ์ต์ ํผ๋ก๋ ์ถ๋ ฅ :
๊ทธ๋ฃน ๋ณ ์ด ํผ๋ก๋(๊ฐ์ค์น) ๊ฐ ์ ์ฅ๋์ด ์๋
sum
๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฆฌ๋ฉด์ ๊ฐ ๊ทธ๋ฃน์ ๊ณก๊ดญ์ด๋ฅผ ํ ๋น ํด์ผ ํ๋ค.- ๊ฐ์ฅ ํฐ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง ๊ทธ๋ฃน์ ๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด๋ถํฐ ํ ๋นํ๊ธฐ ์ํด
sum
๋ฆฌ์คํธ๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ ๋ค ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฐ๋ค.
- ๊ฐ์ฅ ํฐ ๊ฐ์ค์น๋ฅผ ๊ฐ์ง ๊ทธ๋ฃน์ ๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด๋ถํฐ ํ ๋นํ๊ธฐ ์ํด
- ๋ฌธ์ ์ ํ ์ฌํญ ํ์ธ :
์ฒ์์
int length = minerals.length
๋ก ์ ์ถํ์๋๋ฐ 8๋ฒ ํ ์คํธ์ผ์ด์ค๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค. ๋ฌธ์ ์๋ ์ฌ์ฉํ ๊ณก๊ดญ์ด๊ฐ ์๊ฑฐ๋ ๊ด์ฐ์ ์๋ ๋ชจ๋ ๊ด๋ฌผ์ ์บ ๋๊น์ง ๊ณผ์ ์ ๋ฐ๋ณต
ํ๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ ๊ด๋ฌผ์ ๊ฐฏ์ ๋ฟ๋ง ์๋๋ผ ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๊ณก๊ดญ์ด๋ก ์บ ์ ์๋ ๊ด๋ฌผ์ ๊ฐฏ์๋ ๊ฐ์ด ์๊ฐํด์ผ ํ๋ค.- ๊ด๋ฌผ์ ๋ชจ๋ ์บ ๊ฒฝ์ฐ :
minerals.length
- ๋ชจ๋ ๊ณก๊ดญ์ด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ :
(picks[0] + picks[1] + picks[2]) * 5
- ์ ๋๊ฐ์ง ์ผ์ด์ค ์ค ๋ ์์ ์ ๋งํผ๋ฐ์ ์์
์ ํ์ง ๋ชปํ๋ฏ๋ก
Math.min(minerals.length, (picks[0] + picks[1] + picks[2]) * 5)
๋ก length ๋ฅผ ์ ์ํด์ผ ํ๋ค.
- ๊ด๋ฌผ์ ๋ชจ๋ ์บ ๊ฒฝ์ฐ :
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
class Solution {
static class Pick implements Comparable<Pick> {
int diamondPick;
int ironPick;
int stonePick;
public Pick(int diamondPick, int ironPick, int stonePick) {
this.diamondPick = diamondPick;
this.ironPick = ironPick;
this.stonePick = stonePick;
}
@Override
public int compareTo(Pick o) {
return (o.diamondPick + o.ironPick + o.stonePick) - (this.diamondPick + this.ironPick + this.stonePick);
}
}
public int solution(int[] picks, String[] minerals) {
int answer = 0;
int[][] fatigue = new int[3][3];
fatigue[0] = new int[]{1, 1, 1};
fatigue[1] = new int[]{5, 1, 1};
fatigue[2] = new int[]{25, 5, 1};
int length = Math.min(minerals.length, (picks[0] + picks[1] + picks[2]) * 5);
int q = length / 5;
int r = length % 5;
ArrayList<Pick> sum = new ArrayList<>();
for (int i = 0; i < q; i++) {
int diamondPick = 0, ironPick = 0, stonePick = 0;
for (int j = 0; j < 5; j++) {
if (minerals[i * 5 + j].equals("diamond")) {
diamondPick += fatigue[0][0];
ironPick += fatigue[1][0];
stonePick += fatigue[2][0];
} else if (minerals[i * 5 + j].equals("iron")) {
diamondPick += fatigue[0][1];
ironPick += fatigue[1][1];
stonePick += fatigue[2][1];
} else {
diamondPick += fatigue[0][2];
ironPick += fatigue[1][2];
stonePick += fatigue[2][2];
}
}
sum.add(new Pick(diamondPick, ironPick, stonePick));
}
if (r != 0) {
int diamondPick = 0, ironPick = 0, stonePick = 0;
for (int i = 0; i < r; i++) {
if (minerals[q * 5 + i].equals("diamond")) {
diamondPick += fatigue[0][0];
ironPick += fatigue[1][0];
stonePick += fatigue[2][0];
} else if (minerals[q * 5 + i].equals("iron")) {
diamondPick += fatigue[0][1];
ironPick += fatigue[1][1];
stonePick += fatigue[2][1];
} else {
diamondPick += fatigue[0][2];
ironPick += fatigue[1][2];
stonePick += fatigue[2][2];
}
}
sum.add(new Pick(diamondPick, ironPick, stonePick));
}
Collections.sort(sum);
for (Pick p : sum) {
if (picks[0] > 0) {
answer += p.diamondPick;
picks[0]--;
} else if (picks[1] > 0) {
answer += p.ironPick;
picks[1]--;
} else if (picks[2] > 0) {
answer += p.stonePick;
picks[2]--;
} else {
break;
}
}
return answer;
}
}
๋๊ธ๋จ๊ธฐ๊ธฐ