백준 python 기록
백준 파이썬 15686 치킨 배달
작지
2021. 12. 17. 12:13
백준 링크:https://www.acmicpc.net/problem/15686
15686번: 치킨 배달
크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸
www.acmicpc.net
가능한 빠르게 배달이 가능한 치킨의 집 M을 구해서 합을 구하면 되는 문제였다.
초반엔 BFS를 사용해서 구해야 하나? 라고 생각헀지만 너무나 비효율적이라 생각해서 그냥 위치만 저장하고
itertools 의 combinations를 사용해서 모든 경우의 수에 대한 합 중 가장 낮은 값을 넣었다.
생각해보면 엄청 간단한 문제이지만 요상하게 시간이 많이 걸린거 보니 그냥 재능이 없어보인다 ㅎ.
from itertools import combinations
import sys
INF = sys.maxsize
n,m = map(int,input().split())
s = [list(map(int,input().split())) for i in range(n)]
cnt = 0
h = {}
c = []
for i in range(n):
for j in range(n):
if s[i][j] == 1:
h[i,j] = INF
elif s[i][j] == 2:
c.append([i,j])
a = list(combinations(c,m))
result = INF
for i in a:
answer = 0
for j in h:
h[j] = INF
for y in i:
for x in h:
h[x] = min(h[x],abs(x[0]-y[0])+abs(x[1]-y[1]))
result = min(result,sum(h.values()))
print(result)
더 나은 풀이가 있을지도??