[๋ฐฑ์ค/python] 14889๋ฒ : ์คํํธ์ ๋งํฌ
๋ฌธ์
์ค๋์ ์คํํธ๋งํฌ์ ๋ค๋๋ ์ฌ๋๋ค์ด ๋ชจ์ฌ์ ์ถ๊ตฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค. ์ถ๊ตฌ๋ ํ์ผ ์คํ์ ํ๊ณ ์๋ฌด ์ฐธ์๋ ์๋๋ค. ์ถ๊ตฌ๋ฅผ ํ๊ธฐ ์ํด ๋ชจ์ธ ์ฌ๋์ ์ด N๋ช ์ด๊ณ ์ ๊ธฐํ๊ฒ๋ N์ ์ง์์ด๋ค. ์ด์ N/2๋ช ์ผ๋ก ์ด๋ฃจ์ด์ง ์คํํธ ํ๊ณผ ๋งํฌ ํ์ผ๋ก ์ฌ๋๋ค์ ๋๋ ์ผ ํ๋ค.
BOJ๋ฅผ ์ด์ํ๋ ํ์ฌ ๋ต๊ฒ ์ฌ๋์๊ฒ ๋ฒํธ๋ฅผ 1๋ถํฐ N๊น์ง๋ก ๋ฐฐ์ ํ๊ณ , ์๋์ ๊ฐ์ ๋ฅ๋ ฅ์น๋ฅผ ์กฐ์ฌํ๋ค. ๋ฅ๋ ฅ์น Sij๋ i๋ฒ ์ฌ๋๊ณผ j๋ฒ ์ฌ๋์ด ๊ฐ์ ํ์ ์ํ์ ๋, ํ์ ๋ํด์ง๋ ๋ฅ๋ ฅ์น์ด๋ค. ํ์ ๋ฅ๋ ฅ์น๋ ํ์ ์ํ ๋ชจ๋ ์์ ๋ฅ๋ ฅ์น Sij์ ํฉ์ด๋ค. Sij๋ Sji์ ๋ค๋ฅผ ์๋ ์์ผ๋ฉฐ, i๋ฒ ์ฌ๋๊ณผ j๋ฒ ์ฌ๋์ด ๊ฐ์ ํ์ ์ํ์ ๋, ํ์ ๋ํด์ง๋ ๋ฅ๋ ฅ์น๋ Sij์ Sji์ด๋ค.
N=4์ด๊ณ , S๊ฐ ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
i/j | 1 | 2 | 3 | 4 |
1 | 1 | 2 | 3 | |
2 | 4 | 5 | 6 | |
3 | 7 | 1 | 2 | |
4 | 3 | 4 | 5 |
์๋ฅผ ๋ค์ด, 1, 2๋ฒ์ด ์คํํธ ํ, 3, 4๋ฒ์ด ๋งํฌ ํ์ ์ํ ๊ฒฝ์ฐ์ ๋ ํ์ ๋ฅ๋ ฅ์น๋ ์๋์ ๊ฐ๋ค.
- ์คํํธ ํ: S12 + S21 = 1 + 4 = 5
- ๋งํฌ ํ: S34 + S43 = 2 + 5 = 7
1, 3๋ฒ์ด ์คํํธ ํ, 2, 4๋ฒ์ด ๋งํฌ ํ์ ์ํ๋ฉด, ๋ ํ์ ๋ฅ๋ ฅ์น๋ ์๋์ ๊ฐ๋ค.
- ์คํํธ ํ: S13 + S31 = 2 + 7 = 9
- ๋งํฌ ํ: S24 + S42 = 6 + 4 = 10
์ถ๊ตฌ๋ฅผ ์ฌ๋ฏธ์๊ฒ ํ๊ธฐ ์ํด์ ์คํํธ ํ์ ๋ฅ๋ ฅ์น์ ๋งํฌ ํ์ ๋ฅ๋ ฅ์น์ ์ฐจ์ด๋ฅผ ์ต์๋ก ํ๋ ค๊ณ ํ๋ค. ์์ ์์ ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ 1, 4๋ฒ์ด ์คํํธ ํ, 2, 3๋ฒ ํ์ด ๋งํฌ ํ์ ์ํ๋ฉด ์คํํธ ํ์ ๋ฅ๋ ฅ์น๋ 6, ๋งํฌ ํ์ ๋ฅ๋ ฅ์น๋ 6์ด ๋์ด์ ์ฐจ์ด๊ฐ 0์ด ๋๊ณ ์ด ๊ฐ์ด ์ต์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(4 ≤ N ≤ 20, N์ ์ง์)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ S๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์ค์ N๊ฐ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , i๋ฒ ์ค์ j๋ฒ์งธ ์๋ Sij ์ด๋ค. Sii๋ ํญ์ 0์ด๊ณ , ๋๋จธ์ง Sij๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์คํํธ ํ๊ณผ ๋งํฌ ํ์ ๋ฅ๋ ฅ์น์ ์ฐจ์ด์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ๋ต
import sys
from itertools import combinations
N = int(sys.stdin.readline())
S = []
for i in range(N):
S.append(list(map(int, sys.stdin.readline().split())))
all_players = [i for i in range(N)]
teams = []
for t in combinations(all_players, N // 2):
teams.append(list(t))
answer = []
for t in range(len(teams) // 2):
A_stats = 0
for i in teams[t]:
for j in teams[t]:
A_stats += S[i][j]
B_stats = 0
for i in teams[-(t + 1)]:
for j in teams[-(t + 1)]:
B_stats += S[i][j]
answer.append(abs(A_stats - B_stats))
print(min(answer))
all_players = [i for i in range(N)]
teams = []
for t in combinations(all_players, N // 2):
teams.append(list(t))
combinations๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฅํ ํ ์กฐํฉ์ teams์ ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅํ๋ค.
teams์ ์ฒซ๋ฒ์งธ ๋ฆฌ์คํธ๋ ๋ง์ง๋ง ๋ฆฌ์คํธ์ ์ง์ง์ด์ง๋ฏ๋ก teams[i]์ teams[-(i+1)]์ด ์ง์ง์ด์ง๋ค.
์๋ฅผ ๋ค์ด 0, 1, 2, 3์ ํ์ด๋ผ๋ฉด,
teams์ [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]] ํํ๋ก ์ ์ฅ๋์ด [0,1] ํ๊ณผ [2,3] ํ์ด ์ง์ง์ด์ง๊ฒ ๋๋ค.
combinations์ ๋ํด์๋ ์๋์ ํฌ์คํ ์ ์์ธํ ์ค๋ช ํด๋์๋ค.
answer = []
for t in range(len(teams) // 2):
A_stats = 0
for i in teams[t]:
for j in teams[t]:
A_stats += S[i][j]
B_stats = 0
for i in teams[-(t + 1)]:
for j in teams[-(t + 1)]:
B_stats += S[i][j]
answer.append(abs(A_stats - B_stats))
print(min(answer))
teams๋ฅผ ์ด์ฉํ์ฌ ๋ ํ์ ๋ฅ๋ ฅ์น๋ฅผ ๊ณ์ฐํ๋ค.
๋ ํ์ฉ ์ง์ง๊ธฐ ๋๋ฌธ์ range๋ teams์ ์ ๋ฐ์ผ๋ก ์ค์ ํ๋ค.
ํ์ ๊ฐ๊ฐ์ธ์ ์ง์ง์ S[i][j]๋ฅผ ๋ฅ๋ ฅ์น์ ํฉ์ธ A_stats์ B_stats์ ๋ํ๋ค.
answer์ ๋ ํ์ ๋ฅ๋ ฅ์น์ ์ฐจ์ด์ ์ ๋๊ฐ์ ์ ์ฅํ ํ answer์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 2667๋ฒ : ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ (0) | 2021.04.07 |
---|---|
[๋ฐฑ์ค/python] 2630๋ฒ : ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2021.04.06 |
[๋ฐฑ์ค/python] 1260๋ฒ : DFS์ BFS (0) | 2021.04.05 |
[๋ฐฑ์ค/python] 2108๋ฒ : ํต๊ณํ (0) | 2021.04.02 |
[๋ฐฑ์ค/python] 1182๋ฒ : ๋ถ๋ถ์์ด์ ํฉ (0) | 2021.04.02 |