자료구조 & 알고리즘/코딩테스트

[JS 코딩테스트] 코테 입문 수학 "개미 군단" 풀기

칠구의 스터디 2024. 3. 7. 12:36

문제 출처: 코딩테스트 입문 | 프로그래머스 스쿨 (programmers.co.kr)

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

[제한사항]
hp는 자연수입니다.0 ≤ hp ≤ 1000

[입출력 예]
hp          result
23            5
24            6
999         201

이 문제는 가장 공격력이 높은 장군개미 5부터 3 , 1로 hp를 나눠서 문제를 풀어야겠다고 생각했다.

그래서 필요한 것 -> 개미들의 공격력 , 필요한 개미의 수 , 남은 체력

function solution(hp) {
   //개미들의 공격력
   const Apower = 5; 
   const Bpower =3; 
   const Cpower =1;
   
   //필요한 장군개미의 수
    let Aant = Math.floor(hp/Apower); 
    //남은 체력
 	let remaininghp = hp % Apower;
    
    //필요한 병정개미의 수
    let Bant = Math.floor(remaininghp/Bpower);
    //남은 체력
    remaininghp %= Bpower 
    
    //필요한 일개미의 수
    let Cant = remaininghp;
    
    return Aant+Bant+Cant ;
}

  나의 정답이다.

  주석을 보면 알겠지만 필요한 개미의 수 구하기 -> 남은 체력 -> 다음 개미 이런 순으로 정답을 구하였다.

  그런데...

function solution(hp) {
    return Math.floor(hp/5)+Math.floor((hp%5)/3)+(hp%5)%3;
}

다른 분의 풀이를 보니 이렇게 한줄로 개미의 수 구하기 -> 남은 체력 -> 다음 개미를 구할 수 있었다...

'%'와 '/'를 헷갈리지 않고 잘써야 하긴 하지만 이렇게 쉬운 방법이 있었다니 🥲🥲 

나는 아직 멀었고 더 열심히 해야겠다는 생각이 드는 문제였다 ㅠ.ㅠ