Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- aop proxy
- JSON 분리
- step 값 공유
- 스프링배치 메타테이블
- JSON 분할
- 아이템 리더 페이징 처리
- 선언적 트랜잭션 관리
- executioncontext 변수 공유
- 아이템 리더 커스텀
- Spring Batch
- flatfileitemwriter
- 트랜잭션 분리
- mybatis
- step 여러개
- abstractpagingitemreader
- spring batch 5
- JSONArray 분할
- JSONObject 분할
- 스프링배치 csv
- step 사이 변수 공유
- api 아이템 리더
- executioncontext
- 스프링 트랜잭션 관리
- 스프링 배치 5
- spring batch 변수 공유
- stepexecutionlistener
- job parameter
- 읽기 작업과 쓰기 작업 분리
- 스프링배치 엑셀
- 마이바티스 트랜잭션
Archives
- Today
- Total
ebson
boj.kr/15686 치킨 배달 (gold5) 파이썬 풀이 본문
1. 집의 좌표들과 치킨집 좌표들을 각각 리스트에 저장
2. combinations를 사용해 치킨집 좌표 리스트에서 추출한 M개의 치킨집 좌표들을 순회하면서 아래(3,4,5)를 반복
3. 집의 좌표 목록을 순회
4. 집에서 치킨집까지 거리를 계산하고 최소 치킨거리를 저장
5. 모든 집들의 최소 치킨거리를 더한 값을 최소 치킨거리 리스트에 저장
6. 최소 치킨거리 리스트에서 최소값을 출력
N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
chickens = []
homes = []
for y in range(N):
for x in range(N):
if board[y][x] == 2:
chickens.append((y, x))
if board[y][x] == 1:
homes.append((y, x))
def get_d(y1, x2, y2, x1):
return abs(y2-y1) + abs(x2-x1)
from itertools import combinations
chicken_d_sum_list = []
for combi in combinations(chickens, M):
chicken_d_sum = 0
for (hy, hx) in homes:
min_chicken_d = 1e9
for (cy, cx) in combi:
min_chicken_d = min(min_chicken_d, get_d(hy, hx, cy, cx))
chicken_d_sum += min_chicken_d
chicken_d_sum_list.append(chicken_d_sum)
print(min(chicken_d_sum_list))
최단거리를 구하기 위해 bfs보다 좌표연산하는 것이 더 빠를 수 있다.
'ALGORITHM STUDY WITH PYTHON > Bruteforce' 카테고리의 다른 글
boj.kr/1080 체스판 다시 칠하기 (silver4) 자바 풀이 (0) | 2024.06.01 |
---|---|
boj.kr/1080 체스판 다시 칠하기 (silver4) 파이썬 풀이 (0) | 2024.05.25 |
boj.kr/2468 안전 영역 (silver1) 파이썬 풀이 (0) | 2023.04.21 |
boj.kr/14889 스타트와 링크 (silver2) 파이썬 풀이 (0) | 2023.04.20 |
boj.kr/14888 연산자 끼워넣기 (silver1) 파이썬 풀이 (0) | 2023.04.20 |