No Rules Rules

치킨 배달 (feat. 백준, 15686번) 본문

생활/코테

치킨 배달 (feat. 백준, 15686번)

개발하는 완두콩 2022. 7. 23. 20:58
728x90
반응형

치킨 배달
https://www.acmicpc.net/problem/15686

 

15686번: 치킨 배달

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

www.acmicpc.net

반응형
# woohyeon.kim
from itertools import combinations

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

houses = []
stores = []
for ix in range(N):
  for iy in range(N):
    if arr[ix][iy] == 1:
      houses.append([ix, iy])
    elif arr[ix][iy] == 2:
      stores.append([ix, iy])

combs = list(combinations(stores, M))
result = []
for comb in combs:
  tmp = []
  for house_x, house_y in houses:
    way = []
    for store_x, store_y in comb:
      way.append(abs(store_x - house_x) + abs(store_y - house_y))
    tmp.append(min(way))
  result.append(sum(tmp))
print(min(result))
# *&)*@*

문제의 요지는 나의 집에서 가장 가까운 치킨집 하나를 고르고

그렇게 고른 집들은 총 1의 개수만큼 존재합니다.

이때 각 집마다의 가까운 치킨집들을 더하면 이것의 하나의 순열에 대한 결과입니다.

이렇게 모든 순열을 계산했을때, 그 중에 가장 최소값입니다.

728x90
반응형
Comments