diff --git a/assign_teams.py b/assign_teams.py index 58edaa9..a2ea78f 100644 --- a/assign_teams.py +++ b/assign_teams.py @@ -51,23 +51,35 @@ TEAM_SIZE = 5 MAX_SAME_DEPT = 2 SEED = 20260428 # 행사일 시드 (재현 가능) +# EffTech 신규 합류 → 모든 팀에 ≥1명 필수 (화합 목표) +NEW_DEPT = "AI Efficiency Tech" +MIN_NEW_PER_TEAM = 1 + + +def is_valid(teams): + for team in teams: + depts = [d for _, d in team] + # 같은 부서 ≤ 2명 + if max(Counter(depts).values()) > MAX_SAME_DEPT: + return False + # 신규 부서 ≥ 1명 + if depts.count(NEW_DEPT) < MIN_NEW_PER_TEAM: + return False + return True + def assign(seed): rng = random.Random(seed) - for attempt in range(5000): + for attempt in range(20000): shuffled = PEOPLE[:] rng.shuffle(shuffled) teams = [ shuffled[i * TEAM_SIZE : (i + 1) * TEAM_SIZE] for i in range(NUM_TEAMS) ] - ok = all( - max(Counter(d for _, d in team).values()) <= MAX_SAME_DEPT - for team in teams - ) - if ok: + if is_valid(teams): return teams, attempt + 1 - raise RuntimeError(f"제약 만족하는 배정 5000회 시도에도 실패") + raise RuntimeError("제약 만족하는 배정 20000회 시도에도 실패") def main(): diff --git a/participants.json b/participants.json index 640e38a..86994a4 100644 --- a/participants.json +++ b/participants.json @@ -1,37 +1,37 @@ { - "유준희": "팀1", - "김재현": "팀1", - "조민정": "팀1", + "서한배": "팀1", + "서희": "팀1", + "김호승": "팀1", "손현준": "팀1", - "유용혁": "팀1", - "한지승": "팀2", - "김정명": "팀2", - "박재호": "팀2", - "김동국": "팀2", + "김동국": "팀1", "장혁진": "팀2", - "강승형": "팀3", - "김태현": "팀3", - "김민섭": "팀3", - "이성재": "팀3", - "길주현": "팀3", - "서한배": "팀4", - "최호진": "팀4", - "김영관": "팀4", - "이정태": "팀4", - "박영훈": "팀4", - "유지원": "팀5", - "전효준": "팀5", - "정현준": "팀5", - "장다현": "팀5", - "정채윤": "팀5", - "오근현": "팀6", - "이준형": "팀6", - "이준석": "팀6", - "서희": "팀6", - "김호승": "팀6", - "이재광": "팀7", - "이지환": "팀7", - "김병훈": "팀7", - "심성환": "팀7", - "변수민": "팀7" + "이준형": "팀2", + "김재현": "팀2", + "이정태": "팀2", + "장다현": "팀2", + "김영관": "팀3", + "정현준": "팀3", + "이재광": "팀3", + "최호진": "팀3", + "한지승": "팀3", + "이성재": "팀4", + "유지원": "팀4", + "정채윤": "팀4", + "박재호": "팀4", + "강승형": "팀4", + "변수민": "팀5", + "김민섭": "팀5", + "이지환": "팀5", + "오근현": "팀5", + "조민정": "팀5", + "길주현": "팀6", + "심성환": "팀6", + "김병훈": "팀6", + "전효준": "팀6", + "유용혁": "팀6", + "김정명": "팀7", + "이준석": "팀7", + "박영훈": "팀7", + "김태현": "팀7", + "유준희": "팀7" } \ No newline at end of file