ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ ๋ธŒ๋ฃจํŠธํฌ์Šค, ๋ฐฑํŠธ๋ž˜ํ‚น

 

thinking

1. ํŒŒ์ด์ฌ itertools์˜ ์กฐํ•ฉ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ 

2. for๋ฌธ์„ ๋Œ๋ฉด์„œ ํ•ด๋‹น ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ํ–‰๋งŒ ๋Œ๋ฉด์„œ ๋‚˜๋จธ์ง€ ์—ด์˜ ๊ฐ’์„ ๋”ํ•จ
    ex. (1,2,3)์˜ ๊ฒฝ์šฐ๋ผ๋ฉด 1,2,3ํ–‰์„ ๋Œ๋ฉฐ 1ํ–‰์ผ ๋•Œ๋Š” 2,3์—ด์˜ ๊ฐ’,
    2ํ–‰์ผ ๋•Œ๋Š” 1,3์—ด์˜ ๊ฐ’, 3ํ–‰์ผ ๋•Œ๋Š” 1,2์—ด์˜ ๊ฐ’๋งŒ ๋”ํ•˜๋ฉด ํŒ€์˜ ๋Šฅ๋ ฅ์น˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

3. sumA, sumB ๊ตฌํ•œ ๋‹ค์Œ abs๋กœ ์ฐจ์ด ๊ตฌํ•ด์„œ ๊ฐ€์žฅ ์ตœ์†Œ๊ฐ’์ด ๋‹ต

 

โ— ๋ฌธ์ œ๋Š” (1,2,3)-(4,5,6) / (1,4,5)-(2,3,6) ์ด๋Ÿฐ์‹์œผ๋กœ ์ง์„ ์ด๋ฃจ์–ด์•ผํ•˜๋Š”๋ฐ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ๋งค์นญ์‹œํ‚ค๋Š” ๊ฒƒ์ธ๊ฐ€์˜€๋‹ค.

๊ทผ๋ฐ ๋Œ€๋ฐ•์ธ๊ฒŒ itertools๋กœ ์กฐํ•ฉ ๊ตฌํ•˜๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์•Œ์•„์„œ ์ˆœ์„œ๋Œ€๋กœ ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•ด์„œ ๋งค์นญ์ด ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค์Œ ์•ž ์„น์…˜์€ ์•ž์—์„œ๋ถ€ํ„ฐ, ๋’ท์„น์…˜์€ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ธ๋ฑ์Šค๋ฅผ ํ• ๋‹นํ•ด์ฃผ์—ˆ๋‹ค

 

์ฝ”๋“œ

from itertools import combinations

# Sij ํ•ฉ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
def subsum(tp1, tp2):
    sumA, sumB = 0, 0
    for i in tp1:
        for j in tp1:
            sumA += S[i][j]
    for i in tp2:
        for j in tp2:
            sumB += S[i][j]
    return abs(sumA-sumB)


N = int(input())
S = [list(map(int, input().split())) for _ in range(N)]  # Sij: 1~100

comb_lst = list(combinations(range(N), N//2))
res = 987654321
for i in range(len(comb_lst)//2):
    tmp = subsum(comb_lst[i], comb_lst[len(comb_lst)-1-i])
    if tmp < res:
        res = tmp

print(res)

 

๋Œ“๊ธ€