문제 링크
15686번: 치킨 배달
크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸
www.acmicpc.net
문제 풀이
- k(>m)개 만큼의 치킨집이 있을 때, m개의 치킨을 선택하는 경우의 수는 kCm으로 구할 수 있고, 파이썬에서는 combinations를 사용해서 경우를 구할 수 있다.
- 집에서 가장 가까운 치킨집의 거리를 더하고, 각 격우 중 제일 작은 값일 때가 최솟값이 된다.
전체 코드
import sys
from itertools import combinations
n, m = map(int, sys.stdin.readline().split())
arr = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
house = []
chicken = []
for i in range(n):
for j in range(n):
# 집 위치
if arr[i][j] == 1:
house.append([i, j])
# 치킨 집 위치
if arr[i][j] == 2:
chicken.append([i, j])
result = 9999
for i in combinations(chicken, m): # m개의 치킨 집을 선택하는 모든 경우
total = 0
for k in house:
chicken_len = 9999
for j in i:
chicken_len = min(chicken_len, abs(k[0]-j[0]) + abs(k[1]-j[1]))
total += chicken_len
result = min(result, total)
print(result)
반응형
'Coding Test > BOJ' 카테고리의 다른 글
[백준/Python] 19539 사과나무 (0) | 2024.03.22 |
---|---|
[백준/Python] 2294 동전 2 (0) | 2024.03.20 |
[백준/Python] 2230 수 고르기 (0) | 2024.03.15 |
[백준/Python] 2251 물통 (2) | 2024.03.14 |
[백준/Python] 2225 합분해 (0) | 2024.03.12 |