[오늘의 문제] 개미 군단

shlim55·2025년 10월 17일

코딩테스트

목록 보기
153/223

출처: https://school.programmers.co.kr/learn/courses/30/lessons/120837?language=python3

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

제한사항
hp는 자연수입니다.
0 ≤ hp ≤ 1000
입출력 예
hp result
23 5
24 6
999 201
입출력 예 설명
입출력 예 #1

hp가 23이므로, 장군개미 네마리와 병정개미 한마리로 사냥할 수 있습니다. 따라서 5를 return합니다.
입출력 예 #2

hp가 24이므로, 장군개미 네마리 병정개미 한마리 일개미 한마리로 사냥할 수 있습니다. 따라서 6을 return합니다.
입출력 예 #3

hp가 999이므로, 장군개미 199 마리 병정개미 한마리 일개미 한마리로 사냥할 수 있습니다. 따라서 201을 return합니다.

내가 작성한 코드문

def solution(hp):
    answer = 0
    # 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력
    count = 0
  
    answer += hp // 5 # hp = 23이면 장군개미 4마리가 필요
    hp = hp - (hp - (hp % 5)) # hp 그러면 23 - 20 이 깎여야 함   
    
    answer += hp // 3 # hp = 3 남은 상태 병정개미 1마리 필요
    hp = hp - (hp - (hp % 3)) # hp 3 - 3이 깍여야 함 

    answer += hp // 1
    hp = hp - (hp - (hp % 1))
    
    return answer

뭔가 자바 코드문과 유사하게 장황하게 했다.

다른 사람의 풀이

def solution(hp):    
    return hp // 5 + (hp % 5 // 3) + ((hp % 5) % 3)

return hp//5+(hp%5//3)+((hp%5)%3)\text{return } \mathbf{hp // 5} + \mathbf{(hp \% 5 // 3)} + \mathbf{((hp \% 5) \% 3)}

  1. 장군 개미 (공격력 5)의 수hp//5\mathbf{hp // 5}hp // 5: 정수 나눗셈으로, 전체 체력(hphp)을 5로 나누어 장군 개미가 최대 몇 마리 필요한지 계산한다.

  2. 병정 개미 (공격력 3)의 수(hp%5//3)\mathbf{(hp \% 5 // 3)}hp % 5: 장군 개미를 사용하고 남은 체력(나머지)이다.... // 3: 남은 체력을 3으로 나누어 병정 개미가 최대 몇 마리 필요한지 계산한다.

  3. 일개미 (공격력 1)의 수((hp%5)%3)\mathbf{((hp \% 5) \% 3)}hp % 5: 장군 개미를 사용하고 남은 체력.... % 3: 병정 개미까지 사용하고 최종적으로 남은 체력이다.일개미의 공격력은 1이므로, 이 최종 남은 체력의 양이 곧 일개미의 마릿수가 된다.

def solution(hp):
    answer = 0
    for ant in [5, 3, 1]:
        d, hp = divmod(hp, ant)
        answer += d
    return answer

내장 함수 divmod()를 사용

  1. 초기화 및 반복 설정answer = 0: 필요한 총 개미 수를 저장할 변수를 0으로 초기화한다.for ant in [5, 3, 1]: 공격력이 큰 순서대로 장군 개미 (5), 병정 개미 (3), 일개미 (1)를 순회한다.

  2. 핵심 계산: divmod() 사용d, hp = divmod(hp, ant): 이 부분이 중요하다. Python의 내장 함수 divmod(a, b)는 a를 b로 나눈 몫과 나머지를 튜플 형태로 동시에 반환한다.d (몫): 현재 개미(antant)로 처리할 수 있는 최대 마릿수가 된다.hp (나머지): 현재 개미(antant)를 사용하고 남은 체력이 된다. 이 남은 체력은 다음 루프에서 더 약한 개미로 처리된다.

  3. 결과 누적answer += d: 계산된 현재 개미의 마릿수(dd)를 총 개미 수에 더한다.
def solution(hp):
    answer = 0
    answer += hp//5
    hp %= 5
    answer += hp//3
    hp %= 3
    answer += hp//1

    return answer    

마지막 풀이가 가장 대중적일거고 내 풀이랑 유사한데

hp - (hp - (hp % 5)) -> hp % 5랑 사실 같은 뜻임...

23hp에서 피가 얼마나 깎이고 남아야하는지 그거에 몰두 하다보니 23 - 23 - 23 % 5 이런식으로 로직을 만든듯.

profile
A Normal Programmer

0개의 댓글