การตรวจสอบการจัดกลุ่มตัวเลขเป็นคู่และทริปเล็ต
กำหนดสตริงตัวเลข s ตรวจสอบว่าสามารถจัดเรียงใหม่ได้หรือไม่ ที่มีคู่ตัวเลขเดียวกัน 1 คู่ และที่เหลือเป็นทริปเล็ต (3 ตัวเดียวกัน) จำนวนเท่าไรก็ได้
อัลกอริทึม
- นับความถี่ของแต่ละตัวเลข
- ลองเอาตัวเลขแต่ละตัวเป็นคู่ (ลบ 2 จากความถี่)
- ตรวจสอบว่าความถี่ที่เหลือทุกตัวหาร 3 ลงตัวหรือไม่
- ถ้าผ่าน คืนค่า True
- คืนค่าความถี่กลับไป ลองตัวถัดไป
ตัวอย่างโค้ด
from collections import Counter
def solve(s):
d = Counter(s)
for k in d:
d[k] -= 2
if all(d[i] % 3 == 0 for i in d):
return True
d[k] += 2
return False
s = "21133123"
print(solve(s))
ผลลัพธ์
True
คำอธิบาย
s = "21133123" มีความถี่: 1→3, 2→2, 3→3
- ลองเอา 2 เป็นคู่: เหลือ 1→3, 2→0, 3→3 → ทุกตัวหาร 3 ลงตัว → True