문제풀이/구현

[파이썬] [구현] 백준 15686 치킨 배달

승무_ 2022. 5. 18. 11:39

문제

https://www.acmicpc.net/problem/15686

 

15686번: 치킨 배달

크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸

www.acmicpc.net

코드

import sys
from itertools import combinations
input=sys.stdin.readline

n,m=map(int, input().split())
array=[list(map(int, input().split())) for _ in range(n)]

chi=[]
for i in range(n):
    for j in range(n):
        if array[i][j]==2:
            chi.append([i,j])

home=[]
for i in range(n):
    for j in range(n):
        if array[i][j]==1:
            home.append([i,j])

result=[[0]*len(chi) for _ in range(len(home))]
for i in range(len(home)):
    for j in range(len(chi)):
        a,b=home[i]
        c,d=chi[j]
        result[i][j]=abs(a-c)+abs(b-d)
temp1=0
ans=10000
com=(list(combinations(range(0,len(chi)),m)))

for k in range(len(com)):
    for i in range(len(home)):
        temp=10000
        for j in range(len(chi)):
            if j in com[k]:
                temp=min(temp, result[i][j])
        temp1+=temp
    ans=min(ans,temp1)
    temp1=0

print(ans)