https://www.acmicpc.net/problem/15686
15686번: 치킨 배달
크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸
www.acmicpc.net
내가 생각한 풀이 과정
- 치킨집(
chicken)과 집(home)의 좌표를 따로 계산한다 combinations라이브러리를 활용해서 치킨집의 좌표를m개를 가져온다.- m개의 치킨집과 집과의 거리를 비교해서 더해준다
- 그중 가장 짧은 거리를 치킨거리로 설정한다
from itertools import combinations
def distance(a, b) :
x1, y1 = a
x2, y2 = b
return abs(x1-x2) + abs(y1-y2)
n, m = map(int, input().split())
chicken = []
home = []
for i in range(n) :
for ind, j in enumerate(input().split()) :
if j == '1' :
home.append((i, ind))
elif j == '2' :
chicken.append((i, ind))
dis = int(1e9)
for lists in combinations(chicken, m) :
tmp = 0
for i in home :
dist = [distance(i, j) for j in lists]
tmp += min(dist)
dis = min(tmp, dis)
print(dis)
'코딩 > 코테대비' 카테고리의 다른 글
| [Baekjoon] 1520번 내리막 길 / Python (0) | 2022.01.25 |
|---|---|
| [Baekjoon] 7569번 토마토 / Python (0) | 2022.01.18 |
| [Programmers] 광고 삽입(Level 3) / Python (0) | 2021.12.28 |