반응형
def set_min(chicken):
global n
global city
global answer
total = 0
for i in range(n):
for j in range(n):
if city[i][j] == 1:
dists = []
for c in chicken:
dists.append(abs(c[0] - i) + abs(c[1] - j))
total += min(dists)
if total < answer:
answer = total
def dfs(chicken, x, y):
global n
global m
global city
if len(chicken) == m:
set_min(chicken)
return
for i in range(x, n):
t = 0 if x != i else y
for j in range(t, n):
if city[i][j] == 2:
chicken.append((i, j))
if j - 1 < n:
dfs(chicken, i, j + 1)
else:
dfs(chicken, i + 1, 0)
chicken.pop()
# 빈칸 / 집 / 치킨집
cell = (0, 1, 2)
# 도시의 치킨거리 = SUM(집의 치킨거리)
# 최대 M 치킨집 / 나머지 폐업
n, m = map(int, input().split())
city = []
for _ in range(n):
city.append(list(map(int, input().split())))
answer = 10 ** 10
dfs([], 0, 0)
print(answer)
반응형
'Develop > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰] 백준 14502번 (0) | 2021.03.21 |
---|---|
[코딩인터뷰] 너비 우선 탐색 Breadth first search (BFS) (0) | 2021.03.21 |
[코딩인터뷰] 백준 15684번 (0) | 2021.03.20 |
[코딩인터뷰] 백트래킹 Back tracking (0) | 2021.03.20 |
[코딩인터뷰] 백준 14888번 (0) | 2021.03.19 |
꾸준히 노력하는 개발자 "김예건" 입니다.