๋ฌธ์ ๊ฐ ๊ธธ๋ฉด ๊ฒ๋ถํฐ ๋จน๊ณ ๋ณด๋ ์ฌ๋์ด์ง๋ง ์ด๋ฌธ์ ๋ ๊ณจ๋๊ฐ ์๋๋๊น ๋์ ํ์ฃผ๊ณ ํ์๋ค๐ค
์๋ ๊ทธ๋ฆฌ๊ณ ๋ ์ด๊ฑฐ ์ธ๋ "ํํธ"๋ผ๋๊ฒ ์กด์ฌํ๋์ง ์ฒจ์์๋ค ์ด๋ด์๊ฐ;ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
๋ฌธ์ ๊ฐ ๋จผ์๋ฆฐ๊ฐ ์ถ์ด์ ๋ ์ ์ด๋ดค์์ง.
ํ ํ์ด ๋ ์น๊ตฌ๋ค์ ๋ฅ๋ ฅ์น๋ฅผ ๋ชจ๋ ๋ํ๋ ๋ฌธ์ ์ด๋ค.
๊ทธ๋ผ ๋ญ ํด์ผํ๋๊ฐ!
1. ์ฌ๋์ด ๋ช ๋ช ์ธ์ง
→ int(input()) ์ผ๋ก ๋ฐ์. ๋ง์ฝ 6๋ช ์ด๋ผ๊ณ ํ๋ค๋ฉด..
→ people = [0,1,2,3,4,5] ์ด๋ ๊ฒ ์ฌ๋์ ๋ฆฌ์คํธ์ ๋ฃ๋๋ค
2. ์คํํธํ / ๋งํฌํ์ผ๋ก ์ด๋ป๊ฒ ๋๋ ๊ฒ์ธ์ง
→ itertools.combinations ์ฌ์ฉํ์ฌ ์กฐํฉ์ ๊ตฌํจ = startํ (0,1,2)
→ startํ์ ๋ค์ด์์ง ์์ ์ฌ๋ = linkํ (3,4,5) ์ด๋ฐ ์์ผ๋ก.
์ด๊ฑด link = [p for p in people if not in start] ๋ก ํ์! people์ ์๋ ์ฌ๋ ์ค, start์ ์๋ ์ฌ๋์ link์ ๋ฃ์
3. ๊ฐ ํ์ ๋ฅ๋ ฅ์น ํฉ์ ๊ตฌํ๊ธฐ
→ ๊ฐ ํ์ ํฌํจ๋ ์ฌ๋์ ์ซ์๋ก ํํ๋ผ์์ผ๋ฏ๋ก ๊ทธ๋ฅ ๊ทธ๋๋ก table[i][j]๋ก ์ฌ์ฉํ๋ฉด ๋จ!
→ i == j ์ ๊ฒฝ์ฐ์๋ table์ 0์ด๋ผ๊ณ ๋ผ์์ผ๋ฏ๋ก ๊ตณ์ด if๋ก ์ฒ๋ฆฌํด์ฃผ์ง ์์๋ ๋๋ค! (๋ํด๋ 0์ด๋๊น..)
๐โ๏ธ ์์ฑํ ์ฝ๋
# 14889 ๋ฒ : ์คํํธ์ ๋งํฌ
import itertools
def backtracking_14889():
n = int(input()) #์ฌ๋ ๋ช
์
table = []
for _ in range(n):
table.append(list(map(int, input().split())))
people = [i for i in range(n)] #์ฌ๋ ๋ชฉ๋ก
stats = [] #๋ฅ๋ ฅ์น์ ์ฐจ๋ฅผ ์ ์ฅํ๋ ๋ฆฌ์คํธ
#ํ์ ๋๋๋ ๊ณผ์
tmp_team = list(itertools.combinations(range(n), n//2))
for team in tmp_team:
start = team
link = [p for p in people if p not in start]
hap_start = 0 #์คํํธ์ ํฉ
hap_link = 0 #๋งํฌ์ ํฉ
for i in start:
for j in start:
hap_start += table[i][j]
for i in link:
for j in link:
hap_link += table[i][j]
if abs(hap_start - hap_link) == 0: #์ฐจ๊ฐ 0์ด๋ฉด ๋์ด์ ๊ณ์ฐ ์ํด๋ ๋จ
print(0) #0 ์ถ๋ ฅํ๊ณ ๋๋
return
else:
stats.append(abs(hap_start - hap_link)) #0์ด ์๋๋ฉด ๋ฆฌ์คํธ์ ๋ฃ์
print(min(stats)) #์ต์๊ฐ์ ์ถ๋ ฅ
backtracking_14889()
'๐๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv.3] ์ซ์ ๊ฒ์ (0) | 2021.04.27 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv.3] ํ์ ํฐํธ๋ฆฌ๊ธฐ (0) | 2021.04.20 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ์ผ๊ฐ ๋ฌํฝ์ด (0) | 2021.01.05 |
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๊ตฌ๋ช ๋ณดํธ (0) | 2020.12.26 |
[๋ฐฑ์ค] 2447๋ฒ ๋ณ์ฐ๊ธฐ-10 (0) | 2020.12.19 |
๋๊ธ