조합을 사용해 모든 경우의 수를 확인해주며 최솟값을 갱신하는 방식으로 풀 수 있었다
소스 코드
from itertools import combinations
n, m = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
home = []
chicken = []
for i in range(n):
for j in range(n):
if arr[i][j] == 1:
home.append((i, j))
elif arr[i][j] == 2:
chicken.append((i, j))
min_dis = float('inf')
for ch in combinations(chicken, m):
sum_dis = 0
for i in home:
sum_dis += min([abs(i[0]-j[0])+abs(i[1]-j[1]) for j in ch])
if min_dis <= sum_dis:
break
if sum_dis < min_dis:
min_dis = sum_dis
print(min_dis)