15686번: 치킨 배달

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

www.acmicpc.net


 

M만큼 치킨집 조합을 구하여 치킨거리를 노동으로 다 구해보면 된다.

 

  1. 집과 치킨집 좌표를 housechicken에 저장한다.
  2. chicken 을 조합으로 chicomb를 만들어준다.
  3. house 별로 돌리면서 가장 짧은 치킨 거리를 구한다.
  4. 가장 짧은 도시의 치킨 거리를 출력한다.

 

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

N, M = map(int, input().split())
arr = []
for _ in range(N):
    arr.append(list(map(int, input().split())))

house = []
chicken = []
for i in range(N):
    for j in range(N):
        if arr[i][j] == 1:
            house.append([i, j])
        elif arr[i][j] == 2:
            chicken.append([i, j])

result = sys.maxsize
for chicomb in combinations(chicken, M):
    mindistance = 0
    for h in house:
        _min = sys.maxsize
        for c in chicomb:
            distance = abs(h[0]-c[0])+abs(h[1]-c[1])
            _min = min(distance, _min)
        mindistance += _min
    result = min(mindistance, result)


print(result)

'개발 > 알고리즘' 카테고리의 다른 글

[백준 3055] 탈출 (python)  (0) 2021.04.22
[백준 1103] 게임 (python)  (0) 2021.04.22
[백준 16234] 인구 이동 (python)  (0) 2021.04.20
[백준 16235] 나무 재테크 (python)  (0) 2021.04.20
[백준 2467] 용액 (python)  (0) 2021.04.20
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기