<문제 링크>
https://www.acmicpc.net/problem/15686
15686번: 치킨 배달
크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸
www.acmicpc.net
<정답 코드>
sol1) itertools.combinations 사용
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
31
32
33
34
|
from itertools import combinations
# 입력
n, m = map(int, input().split())
town = [list(map(int, input().split())) for _ in range(n)]
# 초기화
house = []
store = []
chicken_distance = 9999
# 집, 치킨집 위치 추출
for i in range(n):
for j in range(n):
if town[i][j] == 1:
house.append((i, j))
elif town[i][j] == 2:
store.append((i, j))
# 치킨집 조합별 최소 치킨 거리 계산
for chicken_comb in combinations(store, m):
tmp = 0
for h in house:
# 해당 집에서 가까운 치킨거리 계산
min_dis = 999
for c in chicken_comb:
dis = abs(h[0] - c[0]) + abs(h[1] - c[1])
min_dis = min(min_dis, dis)
tmp += min_dis
#결과값 업데이트
chicken_distance = min(chicken_distance, tmp)
print(chicken_distance)
|
cs |
'프로그래밍 > Python' 카테고리의 다른 글
백준_python 2910번 빈도 정렬 (해시, 정렬, lambda) (0) | 2024.06.17 |
---|---|
백준_python 2579번 계단 오르기 (DP) (0) | 2024.06.14 |
백준_python 2805번 나무 자르기 (이분 탐색, 시간초과) (0) | 2024.06.11 |
백준_python 4358번 생태학 (소수 반올림) (1) | 2024.06.10 |
백준_python 1269번 대칭 차집합 (0) | 2024.06.05 |