์ฝ๊ฒ ํ์๋๋ฐ ๋ฐ๋ณด๊ฐ์ ๋ถ๋ถ ๋๋ฌธ์ ํ๋ ค์ ํ์ฐธ ๋จธ๋ฆฌ ์ธ๋งด....
๋ง์ง๋ง์ gap ๋ฆฌ์คํธ ๊ตฌํ ๋ ๋ฒ์ ์ค์ ์ ๋ฉ์ฒญํ๊ฒ ํด์ ใ กใ ใ ์ดํด ๋ฉ์ฒญ์ด ๋ต๋ต์
ํ ๋ฆฌ์คํธ๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด ๊ทธ ํ์ ๋ฅ๋ ฅ์น๋ฅผ ๊ณ์ฐํด์ ๋ฐํํ๋ ํจ์ t_status()
1. ์ด์ค ๋ฃจํ ์ฌ์ฉ
1-1. ์ ๋ฌ๋ ํ ๋ฆฌ์คํธ์ ํ์ i
1-2. 1-1์ ํ์ i์ ๋ค๋ฅธ ํ์ j ์ ์ ์ Sij
1-3. Sij๋ฅผ total์ ๋ํด์ค๋ค
2. ์ต์ข total ๋ฐํ
1. n์ ์ ๋ ฅ๋ฐ๊ณ 1~n๊น์ง์ ์๋ฅผ ์ ์ฅํ p ๋ฆฌ์คํธ ์์ฑ
2. ๋ฅ๋ ฅ์น๋ฅผ ์ด์ค ๋ฆฌ์คํธ status ์ ์ ์ฅ
3. p๋ฆฌ์คํธ์ ์ธ์ ์ค n//2 ๋งํผ์ ์ธ์์ ๋ฝ์ ์ ์๋ ์กฐํฉ์ ๋ฆฌ์คํธ team ์ ์ ์ฅ => itertools ๋ชจ๋์ combinations() ํจ์ ์ฌ์ฉ
4. ๊ฐ ํ์ ๋ฅ๋ ฅ์น๋ฅผ t_status() ํจ์๋ก ๊ตฌํด ๋ฆฌ์คํธ team_status ์ ์ ์ฅ
5. ๋ฆฌ์คํธ team_status์ [0]๊ณผ [n-1]์ ์ฐจ, [1]๊ณผ [n-2]์ ์ฐจ, …, [(n/2)-1], [n/2]์ ์ฐจ๋ฅผ ๋ฆฌ์คํธ team_status_gap ๋ฆฌ์คํธ์ ์ ์ฅ
6. team_status_gap์ ์ต์๊ฐ์ ์ถ๋ ฅ
=> ์คํํธ ํ๊ณผ ๋งํฌ ํ์ ๊ฐ๊ฐ ๋๋์ง ์์ ์ด์
team[0] ๊ณผ team[n-1] ์ ์ง์ด๋ค. team[0] + team[n-1] ์ด ์จ์ ํ team์ด ๋จ
= ์คํํธ ํ์ด team[0] ์กฐํฉ์ด๋ฉด ๋งํฌ ํ์ ๋ฐ๋์ team[n-1] ์กฐํฉ์ด ๋๋ค
= ๋ ํ์ ๋ฅ๋ ฅ์น ์ฐจ์ด์ ์ต์๊ฐ์ ๊ตฌํด์ผ ํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ team[0] ๊ณผ team[n-1] ์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ฉด ๋๋ค
# 14889.py
import itertools
def t_status(t):
total = 0
for i in t:
for j in t:
s = status[i-1][j-1]
total += s
return total
n = int(input())
p = [i for i in range(1, n+1)]
status = [[i for i in map(int, input().split())] for _ in range(n)]
team = list(itertools.combinations(p, n//2))
team_status = [t_status(i) for i in team]
team_status_gap = [abs(team_status[i] - team_status[-1-i]) for i in range(len(team)//2)]
print(min(team_status_gap))