출처: 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)
장군 개미 (공격력 5)의 수hp // 5: 정수 나눗셈으로, 전체 체력()을 5로 나누어 장군 개미가 최대 몇 마리 필요한지 계산한다.
병정 개미 (공격력 3)의 수hp % 5: 장군 개미를 사용하고 남은 체력(나머지)이다.... // 3: 남은 체력을 3으로 나누어 병정 개미가 최대 몇 마리 필요한지 계산한다.
일개미 (공격력 1)의 수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()를 사용
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 이런식으로 로직을 만든듯.