ภาพรวม
โจทย์จำลองการต่อสู้: fighters (ลิสต์ไบนารี) ต่อสู้กับ bosses (มาทริกซ์ไบนารี) fighters ชนะ boss row ใดก็ต่อเมื่อจำนวน 1 ใน fighters ≥ จำนวน 1 ใน boss row นั้น คืนมาทริกซ์ bosses ที่เหลือ (ที่ fighters แพ้)
ตัวอย่าง
fighters = [0, 1, 1] (มี 1 ทั้งหมด 2 ตัว)
bosses:
[[0,0,0], # sum=0 → fighters ชนะ (2≥0) → ลบ [0,0,1], # sum=1 → fighters ชนะ (2≥1) → ลบ [0,1,1], # sum=2 → fighters แพ้ (2≥2 จริง แต่โค้ดเช็ค <=) → เก็บ [1,1,1]] # sum=3 → fighters แพ้ (2<3) → เก็บ
เอาต์พุต: [[0,1,1], [1,1,1]]
โค้ด Python
class Solution:
def solve(self, fighters, bosses):
fighter_cnt = sum(fighters)
result = []
for row in bosses:
if fighter_cnt <= sum(row):
result.append(row)
return result
ob = Solution()
fighters = [0, 1, 1]
bosses = [[0, 0, 0], [0, 0, 1], [0, 1, 1], [1, 1, 1]]
print(ob.solve(fighters, bosses))
หมายเหตุ
เงื่อนไข fighter_cnt <= sum(row) หมายถึง fighters แพ้ (boss มี 1 มากกว่าหรือเท่า) ดังนั้น row นั้น "รอดชีวิต" และถูกเก็บไว้ใน result
ผลลัพธ์
[[0, 1, 1], [1, 1, 1]]