개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.
5i + 3j + k = hp라는 식을 구현하기 위해 배열을 활용했다. 하나의 for문에서 개미 각각의 공격력을 유지하며 원하는 값을 구하기 위해서였다.
int[] antPowers는 공격력을 담은 배열이고, int[] counts는 주어진 hp에 따라 구성된 병력을 담을 배열이다.
최소한의 병력을 구하기 위해서는 5로 가장 공격력이 큰 장군개미의 투입율(ㅋㅋㅋ)이 높아야 한다. 따라서 for문을 돌며 제일 먼저 5로 hp를 나누어 준다. 그리고 그 나머지 값을 hp에 대입해 3으로, 1로 병력을 구성하게 한다.
다음으로는 counts 배열의 값을 합한 뒤 반환한다. 지금 생각해 보니 길이가 3인데 굳이 for문을 썼다는 생각이 듦. 그냥 return counts[0] + count[1] + count[2]할 것을!
class Solution {
public int solution(int hp) {
int[] antPowers = {5, 3, 1};
int[] counts = new int[3];
for (int i = 0; i < 3; i++) {
counts[i] = hp / antPowers[i];
hp %= antPowers[i];
}
int minAnts = 0;
for (int count : counts) {
minAnts += count;
}
return minAnts;
}
}
