링크: https://www.acmicpc.net/problem/16987
유형: 백트래킹
난이도: 골드5
스스로 풀었는가? ✅
import sys
readline = sys.stdin.readline
eggNum = int(readline())
egg_hps = []
egg_weights = []
answer = 0
def back(cnt):
global answer
if cnt == eggNum:
broken_eggs = [hp for hp in egg_hps if hp <= 0]
answer = max(answer, len(broken_eggs))
return
if egg_hps[cnt] <= 0:
back(cnt + 1)
else:
is_hit = False
for idx in range(eggNum):
if egg_hps[idx] > 0 and egg_hps[cnt] > 0 and idx != cnt:
is_hit = True
egg_hps[cnt] -= egg_weights[idx]
egg_hps[idx] -= egg_weights[cnt]
back(cnt + 1)
egg_hps[cnt] += egg_weights[idx]
egg_hps[idx] += egg_weights[cnt]
if not is_hit:
back(cnt + 1)
for _ in range(eggNum):
hp, weight = map(int, readline().split())
egg_hps.append(hp)
egg_weights.append(weight)
back(0)
print(answer)
문제를 잘 읽자.. 깨려는 계란도 hp > 0이여야 하는 것, 부딪히면 서로 데미지를 받는다는 걸 처음에 생각하지 못했다.
[ktb-algorithm-study] 3주차