반응형
🔍 문제 요약
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;
}
🔄 정리
빠르게 생각나는 방향대로 정직하게 풀었으나 더 효율적인 방법이 있었으므로 수학적 접근에 대해서 한 번쯤 다시 생각해볼만한 문제이다. 반복되는 같은 숫자를 빼는 것은 나누기를 하고 나머지를 구하는 것과 같다는 것..
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.1] 최소직사각형 [프로그래머스_코딩테스트] [완전탐색, 정렬] [25분] (0) | 2025.05.30 |
---|---|
[Lv.1] K번째 수 [프로그래머스_코딩테스트] [정렬] [25분] (0) | 2025.05.30 |
[Lv.1] 크기가 작은 부분 문자열 [프로그래머스_코딩테스트] [문자열, 슬라이딩 윈도우] [30분] (0) | 2025.05.29 |
[Lv.1] 삼총사 [프로그래머스_코딩테스트] [완전탐색] [25분] (0) | 2025.05.28 |
[Lv.1] 덧칠하기 [프로그래머스_코딩테스트] [Greedy, 구현] [30분] (0) | 2025.05.27 |