알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 치킨 배달(15686)

HRuler 2023. 8. 13. 16:34

1. 문제

https://www.acmicpc.net/problem/15686

 

15686번: 치킨 배달

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

www.acmicpc.net

2. 풀이

# 백준 15686번 : 치킨 배달
# 입력 코드
import sys
input = sys.stdin.readline
from itertools import combinations

# n : 도시의 수
# m : 폐업시키지 않을 치킨집 수
n, m = map(int, input().split())

# nList : 도시 정보 배열
nList = [list(map(int, input().split())) for i in range(n)]

home = []
chicken = []
for i_k, i_v in enumerate(nList):
    for j_k, j_v in enumerate(i_v):
        if j_v == 1:
            home.append([i_k, j_k])
        elif j_v == 2:
            chicken.append([i_k, j_k])
            
minDist = 10000

for i in combinations(chicken, m):
    tempDist = 0
    for j in home:
        chickenDist = 100
        for store in i:
            chickenDist = min(chickenDist, abs(j[0] - store[0]) + abs(j[1] - store[1]))
        tempDist += chickenDist
        
    minDist = min(minDist, tempDist)

print(minDist)

3. Feedback

 - 이번 문제에서는 처음으로 itertools라는 라이브러리를 처음으로 사용했다.

 반복문을 필요한 형태로 Customizing해서 활용할 수 있다는 점에서 유용한 라이브러리였다.

 이후 코딩 문제를 해결할때 유용하게 활용할 수 있을거 같다.