반응형
250x250
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
- 공모주 청약
- 사회조사분석사2급실기신청꿀팁
- 공모주청약
- 사회조사분석사 2급 독학
- 알고리즘
- 사이킷런
- 파이썬 정렬
- 너비우선탐색
- 사회조사분석사 2급 공부방법
- 백준 알고리즘
- 그리디
- DFS
- 사회조사분석사2급실기신청
- 사회조사분석사 2급 접수
- 사회조사분석사 2급 필기 시험시간
- 현대엔지니어링 수요예측
- 사회조사분석사 2급
- 머신러닝
- 사회조사분석사 2급 기출문제집
- 2월공모주
- 오미크론 자가격리
- 사회조사분석사 2급 필기 요약정리
- 정렬
- BFS
- 백준
- 사회조사분석사 2급 필기 공부방법
- 시물레이션
- 공모주
- 벽부수고이동하기 파이썬
- 현대엔지니어링
Archives
- Today
- Total
세상을 바꾸는 데이터
[백준 15686번] 치킨 배달 - 파이썬 본문
문제 링크:
https://www.acmicpc.net/problem/15686
풀이 과정:
이 문제는 기존에 존재하는 치킨집을 줄여서 최대 M개로 유지하면서, 일반 집들로부터 M개의 치킨집까지의 거리를 줄이는 것이 목표이다. 이후 도시의 치킨 거리의 최솟값을 계산하면 된다.
<문제 풀이를 위한 테크닉>
1. N개의 치킨집 중 M개를 골라야 한다면 조합을 이용한다. 파이썬에서 조합(combinations) 라이브러리를 제공하므로, 이를 이용하면 모든 경우를 간단히 계산할 수 있다.
2. 치킨 집 중 M개를 고르는 모든 경우에 대해서 치킨 거리의 합을 계산하고(완전 탐색), 치킨 거리의 최솟값을 구해 출력하면 된다.
풀이 코드:
# 15686번 치킨 배달
# 1. 집, 치킨집 좌표 구하기
# 2. 조합을 이용하여 특정 치킨집 생성
# 3. 집과 치킨집 사이의 최소 거리 합을 구하는 함수 생성
# 4. 도시의 치킨 거리가 최솟값 출력
from itertools import combinations
n, m = map(int, input().split())
house, chicken = [], []
# 집, 치킨집 좌표 구하기
for i in range(n):
data = list(map(int, input().split()))
for j in range(n):
# 입력받은 데이터가 집이라면 현재 좌표를 집 리스트에 추가
if data[j] == 1:
house.append((i, j))
# 입력받은 데이터가 치킨집이라면 현재 좌표를 치킨집 리스트에 추가
elif data[j] == 2:
chicken.append((i, j))
# 도시에 있는 치킨집 중 m개를 골라 영업 후보지로 선정
candidates = list(combinations(chicken, m))
# 집과 치킨집 사이의 최소 거리 합을 구하는 함수
def get_sum(candidate):
result = 0
# 모든 집에 대하여
for hx, hy in house:
# 가장 가까운 치킨집 찾기
temp = 1e9
for cx, cy in candidate:
temp = min(temp, abs(hx-cx) + abs(hy-cy))
# 가장 가까운 치킨집까지의 거리 더하기
result += temp
return result
# 도시의 치킨 거리 최솟값 출력
result = 1e9
for candidate in candidates:
result = min(result, get_sum(candidate))
print(result)
728x90
반응형
'PS Study > BOJ(백준)' 카테고리의 다른 글
[백준 3190번] 뱀 - 파이썬 (37) | 2022.02.12 |
---|---|
[백준 14500번] 테트로미노 - 파이썬 (62) | 2022.02.11 |
[백준 2847번] 게임을 만든 동준이 - 파이썬 (45) | 2022.02.08 |
(알고리즘 공부점검) [백준 1260번] DFS와 BFS - 파이썬 (33) | 2022.02.08 |
[백준 14503번] 로봇청소기 - 파이썬 (31) | 2022.02.08 |
Comments