[프로그래머스/Java] Lv.0 개미 군단

febCho·2024년 4월 2일
0

코딩테스트

목록 보기
159/253
post-thumbnail

문제

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

- 제한사항

  • hp는 자연수입니다.
  • 0 ≤ hp ≤ 1000

풀이

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;
    }
}

결과

profile
Done is better than perfect.

0개의 댓글