Coding Test/Programmers

[Lv.0] 개미 군단 [프로그래머스_코딩테스트] [수학, 구현] [15분]

whawoo 2025. 5. 29. 11:57
반응형

🔍 문제 요약

https://school.programmers.co.kr/learn/courses/30/lessons/120837

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

장군개미 5 공격력, 병정개미 3 공격력, 일꾼개미 1 공격력일 때 HP가 주어지고 최소한의 개미를 투입할 때 개미의 수를 구하기. 

🧠 나의 접근 방식과 시행착오

5분 정도에 빠르게 푼 문제. 간단하게 hp를 데미지가 큰거부터 계속 빼면서 count를 증가시키면 된다.

using System;

public class Solution
{
    /// <summary>
    /// 개미 군단
    /// https://school.programmers.co.kr/learn/courses/30/lessons/120837
    /// </summary>
    public int solution(int hp)
    {
        // 각 개미 종류에 따른 대미지
        const int generalDamage = 5;
        const int soldierDamage = 3;
        const int workerDamage = 1;
        
        // 개미는 한마리당 대미지 한번
        // 최소한의 개미 수를 구하기
        int count = 0;

        while (hp > 0)
        {
            if (hp >= generalDamage)
            {
                hp -= generalDamage;
                count++;
            }
            else if (hp >= soldierDamage)
            {
                hp -= soldierDamage;
                count++;
            }
            else
            {
                hp -= workerDamage;
                count++;
            }
        }
        
        return count;
    }
}

/// <summary>
/// C# 7.3
/// </summary>
internal class Program
{
    public static void Main(string[] args)
    {
        var sl = new Solution();
        var hpArr = new[] { 23, 24, 999 };

        foreach (var hp in hpArr)
        {
            Console.WriteLine(sl.solution(hp));
        }
    }
}

✅ 풀이 코드

생각보다 더 쉬운 풀이 피드백이 있어서 정리. 간단하게 몫과 나머지로 계산을 하면 된다. 생각해보니 5씩 계속 빼는거나 5로 나누고 나머지로 다음것들을 구하는 거나.. 같은거였다. 반복을 할 필요가 없이 아래의 식처럼 큰 대미지부터 몫을 구하고 나머지 구하고 하는 식으로 해서 투입되는 최소 수를 구할 수 있음.

public int solution(int hp)
{
    int generalAnts = hp / 5;
    hp %= 5;

    int soldierAnts = hp / 3;
    hp %= 3;

    int workerAnts = hp; // 나머지

    return generalAnts + soldierAnts + workerAnts;
}

🔄 정리

빠르게 생각나는 방향대로 정직하게 풀었으나 더 효율적인 방법이 있었으므로 수학적 접근에 대해서 한 번쯤 다시 생각해볼만한 문제이다. 반복되는 같은 숫자를 빼는 것은 나누기를 하고 나머지를 구하는 것과 같다는 것..

반응형