๋ง์ธ์ ๊ณก๊ดญ์ด๋ก ๊ด์ฐ์์ ๊ด์์ ์บ๋ ค๊ณ ํฉ๋๋ค. ๋ง์ธ์ ๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด, ์ฒ ๊ณก๊ดญ์ด, ๋ ๊ณก๊ดญ์ด๋ฅผ ๊ฐ๊ฐ 0๊ฐ์์ 5๊ฐ๊น์ง ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ณก๊ดญ์ด๋ก ๊ด๋ฌผ์ ์บ ๋๋ ํผ๋ก๋๊ฐ ์๋ชจ๋ฉ๋๋ค. ๊ฐ ๊ณก๊ดญ์ด๋ก ๊ด๋ฌผ์ ์บ ๋์ ํผ๋ก๋๋ ์๋ ํ์ ๊ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฒ ๊ณก๊ดญ์ด๋ ๋ค์ด์๋ชฌ๋๋ฅผ ์บ ๋ ํผ๋ก๋ 5๊ฐ ์๋ชจ๋๋ฉฐ, ์ฒ ๊ณผ ๋์ ์บ๋๋ ํผ๋ก๋๊ฐ 1์ฉ ์๋ชจ๋ฉ๋๋ค. ๊ฐ ๊ณก๊ดญ์ด๋ ์ข ๋ฅ์ ์๊ด์์ด ๊ด๋ฌผ 5๊ฐ๋ฅผ ์บ ํ์๋ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ธ์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์งํค๋ฉด์ ์ต์ํ์ ํผ๋ก๋๋ก ๊ด๋ฌผ์ ์บ๋ ค๊ณ ํฉ๋๋ค.
- ์ฌ์ฉํ ์ ์๋ ๊ณก๊ดญ์ด์ค ์๋ฌด๊ฑฐ๋ ํ๋๋ฅผ ์ ํํด ๊ด๋ฌผ์ ์บก๋๋ค.
- ํ ๋ฒ ์ฌ์ฉํ๊ธฐ ์์ํ ๊ณก๊ดญ์ด๋ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ์ฌ์ฉํฉ๋๋ค.
- ๊ด๋ฌผ์ ์ฃผ์ด์ง ์์๋๋ก๋ง ์บ ์ ์์ต๋๋ค.
- ๊ด์ฐ์ ์๋ ๋ชจ๋ ๊ด๋ฌผ์ ์บ๊ฑฐ๋, ๋ ์ฌ์ฉํ ๊ณก๊ดญ์ด๊ฐ ์์ ๋๊น์ง ๊ด๋ฌผ์ ์บก๋๋ค.
์ฆ, ๊ณก๊ดญ์ด๋ฅผ ํ๋ ์ ํํด์ ๊ด๋ฌผ 5๊ฐ๋ฅผ ์ฐ์์ผ๋ก ์บ๊ณ , ๋ค์ ๊ณก๊ดญ์ด๋ฅผ ์ ํํด์ ๊ด๋ฌผ 5๊ฐ๋ฅผ ์ฐ์์ผ๋ก ์บ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ, ๋ ์ฌ์ฉํ ๊ณก๊ดญ์ด๊ฐ ์๊ฑฐ๋ ๊ด์ฐ์ ์๋ ๋ชจ๋ ๊ด๋ฌผ์ ์บ ๋๊น์ง ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋ฉ๋๋ค.
๋ง์ธ์ด ๊ฐ๊ณ ์๋ ๊ณก๊ดญ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด picks
์ ๊ด๋ฌผ๋ค์ ์์๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด minerals
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ง์ธ์ด ์์
์ ๋๋ด๊ธฐ๊น์ง ํ์ํ ์ต์ํ์ ํผ๋ก๋๋ฅผ return ํ๋ solution
ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
ํผ๋ก๋์ ๋ฒ์์ ๊ณก๊ดญ์ด์ ์ ๋ณด๊ฐ ์ ํด์ ธ ์๊ณ , ์ต์ ์ ์ ํ์ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ์ ์ ๊ทผ์ ํ์๋ค.
๊ณก๊ดญ์ด ํ๋๋ก ๊ด๋ฌผ 5๊ฐ๋ฅผ ์ฐ์์ผ๋ก ์บ๊ธฐ ๋๋ฌธ์, ๊ด๋ฌผ์ 5๊ฐ์ฉ ๊ทธ๋ฃน์ง์ด ๊ฐ ๊ทธ๋ฃน์ ํผ๋ก๋ ์ดํฉ์ ๊ณ์ฐํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ, ๊ฐ์ฅ ํผ๋ก๋๊ฐ ๋์ ๊ทธ๋ฃน๋ถํฐ ์ฐจ๋ก๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํด ๋ณด์๋ค.
for (int i = 0; i < Math.min(totalPicks * 5, totalMinerals); i += 5) {
int sum = 0; // ํ์ฌ ๊ทธ๋ฃน์ ํผ๋ก๋
int damage = 0; // ๊ฐ ๊ด๋ฌผ์ ๋ํ ํผ๋ก๋
for (int j = i; j < Math.min(i + 5, totalMinerals); j++) {
switch (minerals[j]) {
case "diamond":
damage = 25;
break;
case "iron":
damage = 5;
break;
case "stone":
damage = 1;
break;
}
sum += damage; // ํผ๋ก๋ ์ดํฉ ์
๋ฐ์ดํธ
mineralsGroup[i / 5][j % 5 + 1] = damage; // ๊ฐ ๊ด๋ฌผ์ ํผ๋ก๋ ์ ์ฅ
}
mineralsGroup[i / 5][0] = sum; // ํ์ฌ ๊ทธ๋ฃน์ ์ด ํผ๋ก๋ ์ ์ฅ
}
์ฃผ์ด์ง minerals
๋ฐฐ์ด์ 5๊ฐ์ฉ ๊ทธ๋ฃน์ง์ด ํผ๋ก๋๋ฅผ ๊ณ์ฐํด์ผ ํ๋๋ฐ,
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ์ ์ฒด ๊ณก๊ดญ์ด์ ๊ฐ์์ 5๋ฅผ ๊ณฑํ ์์ minerals
์ ์ ์ฒด ๊ธธ์ด ์ค ๋ ์์ ๊ฐ์ด ์บ ์ ์๋ ๊ด๋ฌผ์ ์ต๋ ๊ฐ์๋ผ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ง์ฝ ์ฌ์ฉํ ์ ์๋ ๊ณก๊ดญ์ด๊ฐ ๋ง๋๋ผ๋, ์ค์ ๋ก ์บ์ผ ํ ๊ด๋ฌผ์ด ์๋ค๋ฉด ๋ฃจํ๋ ๊ทธ๋งํผ๋ง ๋ฐ๋ณต๋์ด์ผ ํ๋ค.
switch๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ด๋ฌผ์ ์ข
๋ฅ์ ๋ฐ๋ผ ํผ๋ก๋๋ฅผ ์ค์ ํ๊ณ , sum
์ ํผ๋ก๋๋ฅผ ๋์ ํด mineralsGroup[i / 5][0]
์ ํ์ฌ ๊ทธ๋ฃน์ ์ด ํผ๋ก๋๋ฅผ ์ ์ฅํ๊ณ , mineralsGroup[i / 5][j % 5 + 1]
์ ๊ฐ ๊ด๋ฌผ์ ํผ๋ก๋๋ฅผ ์ ์ฅํด์ค๋ค.
Arrays.sort(mineralsGroup, (o1, o2) -> o2[0] - o1[0]);
mineralsGroup
์ ์ด ํผ๋ก๋ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ฅ ํผ๋ก๋๊ฐ ๋์ ๊ทธ๋ฃน๋ถํฐ ์ฐจ๋ก๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
for (int i = 0; i < totalPicks; i++) {
int[] temp = mineralsGroup[i];
String pick = "";
if (dia > 0) {
dia -= 1;
pick = "diamond";
}
else if (iron > 0) {
iron -= 1;
pick = "iron";
}
else if (stone > 0) {
stone -= 1;
pick = "stone";
}
์ด์ ๊ฐ ๊ณก๊ดญ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ฌ์ฉ ๊ฐ๋ฅํ ๊ณก๊ดญ์ด ์ค์์ ๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ๊ณ , ๊ทธ๋ค์์ผ๋ก ์ฒ ๊ณก๊ดญ์ด, ๋ ๊ณก๊ดญ์ด ์์ผ๋ก ์ฌ์ฉํ๋ค.
์ฌ์ฉํ ๊ณก๊ดญ์ด์ ๊ฐ์๋ฅผ ์ค์ด๊ณ , ์ฌ์ฉํ ๊ณก๊ดญ์ด๋ฅผ pick
์ ์ ์ฅํ๋ค.
for (int j = 1; j < 6; j++) {
switch (pick) {
case "diamond":
answer += (int) Math.ceil(temp[j] / 25.0);
break;
case "iron":
answer += (int) Math.ceil(temp[j] / 5.0);
break;
case "stone":
answer += temp[j];
break;
}
}
์ฌ์ฉํ ๊ณก๊ดญ์ด์ ๋ฐ๋ผ ๊ฐ ๊ด๋ฌผ์ ํผ๋ก๋๋ฅผ ๊ณ์ฐํ๋ค.
Math.ceil
์ ์ฌ์ฉํ ์ด์ ๋ ๊ณก๊ดญ์ด์ ํน์ฑ์ ๋ฐ๋ผ ํผ๋ก๋๊ฐ ๋ค๋ฅด๊ฒ ์ ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ค.
import java.util.*;
class Solution {
public int solution(int[] picks, String[] minerals) {
int answer = 0;
int dia = picks[0]; // ๋ค์ด์ ๊ณก๊ดญ์ด ๊ฐ์
int iron = picks[1]; // ์ฒ ๊ณก๊ดญ์ด ๊ฐ์
int stone = picks[2]; // ๋ ๊ณก๊ดญ์ด ๊ฐ์
// ์ ์ฒด ๊ณก๊ดญ์ด์ ๊ฐ์
int totalPicks = dia + iron + stone;
// ๊ด์ ์ด ๊ฐ์
int totalMinerals = minerals.length;
// 5๊ฐ์ฉ ๊ทธ๋ฃนํํด์ ํผ๋ก๋ ๊ณ์ฐ
int[][] mineralsGroup = new int[totalPicks][6];
for (int i = 0; i < Math.min(totalPicks * 5, totalMinerals); i += 5) {
int sum = 0; // ํ์ฌ ๊ทธ๋ฃน์ ํผ๋ก๋
int damage = 0; // ๊ฐ ๊ด๋ฌผ์ ๋ํ ํผ๋ก๋
for (int j = i; j < Math.min(i + 5, totalMinerals); j++) {
switch (minerals[j]) {
case "diamond":
damage = 25;
break;
case "iron":
damage = 5;
break;
case "stone":
damage = 1;
break;
}
sum += damage; // ํผ๋ก๋ ์ดํฉ ์
๋ฐ์ดํธ
mineralsGroup[i / 5][j % 5 + 1] = damage; // ๊ฐ ๊ด๋ฌผ์ ํผ๋ก๋ ์ ์ฅ
}
mineralsGroup[i / 5][0] = sum; // ํ์ฌ ๊ทธ๋ฃน์ ์ด ํผ๋ก๋ ์ ์ฅ
}
// ํผ๋ก๋ ํฉ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
Arrays.sort(mineralsGroup, (o1, o2) -> o2[0] - o1[0]);
for (int i = 0; i < totalPicks; i++) {
int[] temp = mineralsGroup[i];
String pick = "";
// ์ฌ์ฉํ ๊ณก๊ดญ์ด์ ๊ฐ์๋ฅผ ์ค์ด๊ณ , ์ด๋ค ๊ณก๊ดญ์ด๋ฅผ ์ฌ์ฉํ๋ ์ง ์ ์ฅ
if (dia > 0) {
dia -= 1;
pick = "diamond";
}
else if (iron > 0) {
iron -= 1;
pick = "iron";
}
else if (stone > 0) {
stone -= 1;
pick = "stone";
}
// ๊ด๋ฌผ๋ณ ํผ๋ก๋ ๊ณ์ฐ
for (int j = 1; j < 6; j++) {
switch (pick) {
case "diamond":
answer += (int) Math.ceil(temp[j] / 25.0);
break;
case "iron":
answer += (int) Math.ceil(temp[j] / 5.0);
break;
case "stone":
answer += temp[j];
break;
}
}
}
return answer;
}
}