[python] ๋ฐฑ์ค - 14889. ์คํํธ์ ๋งํฌ

๐ค๋ฌธ์  ํด๊ฒฐ
- 
S3 | ๋ธ๋ฃจํธํฌ์ค, ๋ฐฑํธ๋ํน
์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํ์ฌ Aํ์ ๊ตฌํ๋ค.
- 
์ ์ฒด ๋ฉค๋ฒ์ ์ ๋ฐ์ด ๋ ๋๊น์ง ํ์ ๊ตฌ์ฑ 
- 
set์ผ๋ก ๊ตฌํ๋ค. ( ๊ต์งํฉ์ ์ฌ์ฉํด์ Bํ์ ๊ตฌํ๊ธฐ ์ํด ) 
๋ ํ์ ๊ตฌํ์ผ๋ฉด ๊ฐ ํ์ ๋ชจ๋ ์กฐํฉ์ ํ ์ด๋ธ์์ ๊ฐ์ ๊ณ์ฐํด์ ๊ตฌํด์ค๋ค
- 
์ด๋ฒ์๋ ์ฝค๋น๋ค์ด์  ๋ชจ๋์ ์ฌ์ฉํ๋ค. 
- 
ํ ์ด๋ธ์ ๊ฐ์ ๋ชจ๋ ๋ํด์ฃผ๊ณ 
- 
๋ ํ์ ์ดํฉ์ ๋นผ์ค๋ค ์ ๋๊ฐ์ ์์์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค. 
์ต์๊ฐ์ผ๋ก ๋ต์ ๊ฐฑ์ ํด์ค๋ค.
๐จ ํ์ ๊ตฌํ ๋ ์ฝค๋น๋ค์ด์ ์ ์ฐ์ง ์์ ์ด์ ๋ ์ฝค๋น๋ค์ด์ ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ๋๋ฌธ
์ ์ฒด ํ์ [0, 1, 2, 3] ์ผ ๋
A ํ์ด 0,1 Bํ์ด 1,2 ์ธ ๊ฒฝ์ฐ์
A ํ์ด 2,3 Bํ์ด 0,1 ์ธ ๊ฒฝ์ฐ์ ๋ต์ ๊ฐ์ง๋ง
์ฝค๋น๋ค์ด์ ์ ์ด ๋๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๋ฏ๋ก ๋นํจ์จ์ 
๐ป์์ค ์ฝ๋
from itertools import combinations
# ํ ๋๋๊ธฐ - set ์ด์ฉ
def split_team(a_team, idx):
    global answer
    if len(a_team) == len(all_team) // 2:
        b_team = all_team - a_team
        answer = min(answer, abs(sum_stat(a_team) - sum_stat(b_team)))
        return
    for i in range(idx, len(all_team)):
        a_team.add(i)
        split_team(a_team, i + 1)
        a_team.remove(i)
# ํ ์คํฏ ๊ณ์ฐํ๊ธฐ
def sum_stat(team):
    stat = 0
    for player1, player2 in combinations(team, 2):
        stat += table[player1][player2] + table[player2][player1]
    return stat
if __name__ == '__main__':
    N = int(input())
    table = [list(map(int, input().split())) for _ in range(N)]
    all_team = set(i for i in range(N))
    answer = float('inf')
    split_team(set(), 0)
    print(answer)
 
๐๋ฌธ์  ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/14889
14889๋ฒ: ์คํํธ์ ๋งํฌ
์์  2์ ๊ฒฝ์ฐ์ (1, 3, 6), (2, 4, 5)๋ก ํ์ ๋๋๋ฉด ๋๊ณ , ์์  3์ ๊ฒฝ์ฐ์๋ (1, 2, 4, 5), (3, 6, 7, 8)๋ก ํ์ ๋๋๋ฉด ๋๋ค.
www.acmicpc.net
