์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์ค 14889๋ฒ ๋ฌธ์ “์คํํธ์ ๋งํฌ”๋ฅผ ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ N๋ช ์ ์ฌ๋๋ค์ด ๋ ํ์ผ๋ก ๋๋์ด์ง ๋, ๋ ํ์ ๋ฅ๋ ฅ์น ์ฐจ์ด๋ฅผ ์ต์ํํ๋ ๋ฌธ์ ์ ๋๋ค.
1. ๋ฌธ์ ์ค๋ช
1) ๋ฌธ์ ๊ฐ์
• N๋ช ์ ์ฌ๋๋ค์ด ๋ ํ์ผ๋ก ๋๋์ด ๊ฒ์์ ํฉ๋๋ค.
• ๊ฐ ์ฌ๋๋ง๋ค ๋ค๋ฅธ ์ฌ๋๊ณผ ํ์ ์ด๋ฃจ์์ ๋์ ๋ฅ๋ ฅ์น๊ฐ ์ฃผ์ด์ง๋๋ค.
• ๋ ํ์ ๋ฅ๋ ฅ์น ์ฐจ์ด๋ฅผ ์ต์ํํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
2) ์ ๋ ฅ
• ์ฒซ ๋ฒ์งธ ์ค์ ์ฌ๋์ ์ N์ด ์ฃผ์ด์ง๋๋ค. (4 ≤ N ≤ 20, N์ ์ง์)
• ๋ ๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ์ฌ๋์ ๋ฅ๋ ฅ์น๊ฐ ์ฃผ์ด์ง๋๋ค.
3) ์ถ๋ ฅ
• ๋ ํ์ ๋ฅ๋ ฅ์น ์ฐจ์ด์ ์ต์๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ
• sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์๋๋ฅผ ๋์ ๋๋ค.
• ์ฒซ ๋ฒ์งธ ์ค์์ ์ฌ๋์ ์ N์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
• ๋ค์ N๊ฐ์ ์ค์์ ๋ฅ๋ ฅ์น ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ๊ทธ๋ํ ๊ตฌ์ฑ
• 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฌ๋ ๊ฐ์ ๋ฅ๋ ฅ์น๋ฅผ ์ ์ฅํฉ๋๋ค.
3) ์ฌ๊ท ๋ฐ ๋ฐฑํธ๋ํน์ ์ด์ฉํ ํ ๋๋๊ธฐ
• ์ฌ๊ท ํจ์์ ๋ฐฑํธ๋ํน์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฐ๋ฅํ ํ ์กฐํฉ์ ํ์ํฉ๋๋ค.
• ๋ ํ์ ๋ฅ๋ ฅ์น ์ฐจ์ด๋ฅผ ๊ณ์ฐํ์ฌ ์ต์๊ฐ์ ๊ฐฑ์ ํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# N: ์ด ์ธ์ ์
N = int(input())
# ๋ฅ๋ ฅ์น ๋ฐฐ์ด ์ด๊ธฐํ
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
# ์ต์ ์ฐจ์ด๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์, ์ด๊ธฐ๊ฐ์ ๋งค์ฐ ํฐ ๊ฐ์ผ๋ก ์ค์
ans = sys.maxsize
# ํ์ ๋๋๋ ์ฌ๊ท ํจ์
def rec(n, teamA, teamB):
global ans
# ๋ชจ๋ ์ธ์์ ๋ค ๋ฐฐ์ ํ์ ๋
if n == N:
# ํA์ ํB์ ์ธ์ ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ๊ณ์ฐ
if len(teamA) == len(teamB):
asum = bsum = 0
# ๊ฐ ํ์ ๋ฅ๋ ฅ์น๋ฅผ ๊ณ์ฐ
for i in range(N // 2):
for j in range(N // 2):
asum += arr[teamA[i]][teamA[j]]
bsum += arr[teamB[i]][teamB[j]]
# ๋ฅ๋ ฅ์น ์ฐจ์ด์ ์ต์๊ฐ ๊ฐฑ์
ans = min(ans, abs(asum - bsum))
return
# ํ์ฌ ์ธ์์ ํA์ ์ถ๊ฐํ๊ณ ๋ค์ ์ธ์์ ์ฒ๋ฆฌ
rec(n + 1, teamA + [n], teamB)
# ํ์ฌ ์ธ์์ ํB์ ์ถ๊ฐํ๊ณ ๋ค์ ์ธ์์ ์ฒ๋ฆฌ
rec(n + 1, teamA, teamB + [n])
# ์ด๊ธฐ ํธ์ถ: ์ธ์ n=0์์ ์์, ํA์ ํB๋ ๋น ๋ฆฌ์คํธ๋ก ์์
rec(0, [], [])
# ์ต์ ๋ฅ๋ ฅ์น ์ฐจ์ด ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ ๋ฐ๊ธฐ
• N๊ณผ ๋ฅ๋ ฅ์น ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ๊ณ , arr์ ์ ์ฅํฉ๋๋ค.
2) ๊ทธ๋ํ ๊ตฌ์ฑ
• arr์ N x N ํฌ๊ธฐ์ 2์ฐจ์ ๋ฆฌ์คํธ๋ก, ๊ฐ ์ฌ๋ ๊ฐ์ ๋ฅ๋ ฅ์น๋ฅผ ์ ์ฅํฉ๋๋ค.
3) ์ฌ๊ท ๋ฐ ๋ฐฑํธ๋ํน์ ์ด์ฉํ ํ ๋๋๊ธฐ
• rec ํจ์๋ ํ์ฌ ์ธ์ n๊ณผ ํ์ฌ๊น์ง ๋ฐฐ์ ๋ ํ teamA, teamB๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค.
• ๋ชจ๋ ์ธ์์ ๋ค ๋ฐฐ์ ํ์ ๋(n == N), ๋ ํ์ ์ธ์์ด ๊ฐ์ผ๋ฉด ๋ฅ๋ ฅ์น ์ฐจ์ด๋ฅผ ๊ณ์ฐํฉ๋๋ค.
• ๊ฐ ํ์ ๋ฅ๋ ฅ์น ํฉ์ ๊ณ์ฐํ๊ณ , ๊ทธ ์ฐจ์ด๊ฐ ์ต์๊ฐ ๋๋๋ก ans๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
• ํ์ฌ ์ธ์์ teamA์ ์ถ๊ฐํ๊ฑฐ๋, teamB์ ์ถ๊ฐํ์ฌ ๋ค์ ์ธ์์ ์ฒ๋ฆฌํ๋๋ก ์ฌ๊ท ํธ์ถํฉ๋๋ค.
4) ๊ฒฐ๊ณผ ์ถ๋ ฅ
• ๊ณ์ฐ๋ ์ต์ ๋ฅ๋ ฅ์น ์ฐจ์ด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์์๋ฅผ ํตํ ์ค๋ช
์๋ฅผ ๋ค์ด, N = 4์ด๊ณ , ๋ฅ๋ ฅ์น ๋ฐฐ์ด์ด ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ก๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
arr = [
[0, 1, 2, 3],
[1, 0, 4, 5],
[2, 4, 0, 6],
[3, 5, 6, 0]
]
๋จ๊ณ 1: ์ด๊ธฐ ์ํ
n = 0
teamA = []
teamB = []
๋จ๊ณ 2: ์ฌ๊ท ํธ์ถ์ ํตํด ํ ๋๋๊ธฐ
1. n = 0์ธ ์ฌ๋์ teamA์ ์ถ๊ฐ
n = 1
teamA = [0]
teamB = []
2. n = 1์ธ ์ฌ๋์ teamA์ ์ถ๊ฐ
n = 2
teamA = [0, 1]
teamB = []
3. n = 2์ธ ์ฌ๋์ teamA์ ์ถ๊ฐ (์ด ๊ฒฝ์ฐ๋ ๋ฐฐ์ ๋จ, ํ ์ธ์์ ๋ถ๊ท ํ)
4. n = 2์ธ ์ฌ๋์ teamB์ ์ถ๊ฐ
n = 3
teamA = [0, 1]
teamB = [2]
5. n = 3์ธ ์ฌ๋์ teamA์ ์ถ๊ฐ (์ด ๊ฒฝ์ฐ๋ ๋ฐฐ์ ๋จ, ํ ์ธ์์ ๋ถ๊ท ํ)
6. n = 3์ธ ์ฌ๋์ teamB์ ์ถ๊ฐ
n = 4
teamA = [0, 1]
teamB = [2, 3]
๋จ๊ณ 3: ๋ฅ๋ ฅ์น ๊ณ์ฐ
• teamA = [0, 1]์ ๋ฅ๋ ฅ์น ํฉ (asum)
asum = arr[0][0] + arr[0][1] + arr[1][0] + arr[1][1]
= 0 + 1 + 1 + 0
= 2
• teamB = [2, 3]์ ๋ฅ๋ ฅ์น ํฉ (bsum)
bsum = arr[2][2] + arr[2][3] + arr[3][2] + arr[3][3]
= 0 + 6 + 6 + 0
= 12
• ๋ฅ๋ ฅ์น ์ฐจ์ด
abs(asum - bsum) = abs(2 - 12) = 10
******
Initial state:
teamA: []
teamB: []
1. Add person 0 to teamA:
teamA: [0]
teamB: []
2. Add person 1 to teamA:
teamA: [0, 1]
teamB: []
3. Add person 2 to teamB:
teamA: [0, 1]
teamB: [2]
4. Add person 3 to teamB:
teamA: [0, 1]
teamB: [2, 3]
Calculate abilities:
teamA: 2
teamB: 12
Difference:
abs(2 - 12) = 10
******
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 14888[์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ] (0) | 2024.07.11 |
---|---|
BOJ(๋ฐฑ์ค) 13458[์ํ ๊ฐ๋ ] (0) | 2024.07.10 |
BOJ(๋ฐฑ์ค) 2606[๋ฐ์ด๋ฌ์ค] (0) | 2024.07.08 |
BOJ(๋ฐฑ์ค) 14267[ํ์ฌ ๋ฌธํ 1] (0) | 2024.07.07 |
BOJ(๋ฐฑ์ค) 1068[ํธ๋ฆฌ] (0) | 2024.07.07 |