티스토리 뷰

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

N, M = map(int, sys.stdin.readline().split())

s = []
for _ in range(N):
    s.append(list(map(int, sys.stdin.readline().split())))

chicken = [] #모든 치킨집의 위치

for i in range(N):
    for j in range(N):
        if s[i][j] == 2:
            chicken.append([i+1, j+1])

cnt = [i for i in range(len(chicken))]
com = list(combinations(cnt, M))


res = 99999
for i in range(len(com)):
    shop = [] # 조합 별 치킨 집의 위치
    for j in range(M):
        shop.append(chicken[com[i][j]])

    chi_len = 0 # 치킨 거리
    for j in range(N):
        for k in range(N):
            tmp = 100
            if s[j][k] == 1:
                for l in range(M):
                    tmp = min(tmp, abs(j + 1 - shop[l][0]) + abs(k + 1 - shop[l][1]))
                chi_len += tmp
    res = min(res, chi_len)

print(res)
공지사항
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함