ํ์ด
์ฃผ์ด์ง ํฌ๊ธฐ์ NxN ๋์์์ ์นํจ์ง์ M๊ฐ๋งํผ๋ง ๋จ๊ฒผ์ ๋ ์ง๋ง๋ค ์ต์๊ฑฐ๋ฆฌ๋ฅผ ์ค ์ ์๋ ์กฐํฉ์ ์ฐพ๋ ๋ฌธ์ ๋ค.itertools ์ combinations ๋ชจ๋์ ํ์ฉํด ์ฃผ์ด์ง ์นํจ์ง ์กฐํฉ์ ์ฐพ๊ณ ๊ฐ ์กฐํฉ๋ง๋ค ๊ฐ ์ง๋ค์ ์ต์๊ฑฐ๋ฆฌ๋ฅผ ๋ค ํฉํด์ ๊ทธ ์ค ์ ์ผ ์ ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์๋ด์ผํ๋ค.
์๋ฅผ ๋ค์ด 1, 2, 3๋ฒ ์นํจ์ง์ด ์๊ณ M ์ด 2์ผ ๊ฒฝ์ฐ.(1, 2), (1, 3), (2, 3) ์ด 3๊ฐ์ง ์กฐํฉ์ด ์๊ธฐ๋๋ฐ์ง๋ง๋ค 1๋ฒ๊ณผ 2๋ฒ ์นํจ์ง ์ค ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ๋ฅผ comb_min ์ ๋ํด์ค๋ค.๋ชจ๋ ์ง๋ค์ ๋ํ ๋ฐ๋ณต์ด ๋๋๋ฉด 1๋ฒ์งธ ์กฐํฉ์ ๋ํ ์นํจ๊ฑฐ๋ฆฌ ์ฆ ans ๊ฐ ๋์จ๋ค.
์ด ์์ ์ ๊ฐ ์กฐํฉ๋ง๋ค ๋ฐ๋ณตํด์ ์ต์๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์๋ด ์ถ๋ ฅํ๋ฉด๋๋ค.
์์ค์ฝ๋
from itertools import combinations
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
town = []
house = []
chicken = []
for i in range(N):
t = list(map(int, input().split()))
town.append(t)
for j in range(N):
if t[j] == 1:
house.append((i, j))
elif t[j] == 2:
chicken.append((i, j))
comb = combinations(chicken, M)
ans = float("inf")
for c in comb: # ๊ฐ๋ฅํ ์นํจ์ง ๊ฒฝ์ฐ์ ์
comb_min = 0
for i, j in house:
min_dis = float("inf")
for x, y in c:
chi_dis = abs(x-i) + abs(y-j) # ๊ฐ ์นํจ์ง๊ณผ ์ง๊ฐ์ ์นํจ๊ฑฐ๋ฆฌ
min_dis = min(chi_dis, min_dis) # ๊ฒฝ์ฐ์ ์์์ ์ต์ ์นํจ๊ฑฐ๋ฆฌ
comb_min += min_dis # ๊ฒฝ์ฐ์ ์์์ ๋ชจ๋ ์ง๊ฐ์ ์นํจ๊ฑฐ๋ฆฌ
ans = min(ans, comb_min) # ์ต์ ์นํจ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๋ ์กฐํฉ
print(ans)