Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 편스토랑 우승상품
- 캐치카페
- Kaggle
- 프로그래머스 파이썬
- gs25
- 금융문자분석경진대회
- leetcode
- 코로나19
- 파이썬
- 더현대서울 맛집
- SW Expert Academy
- 백준
- 맥북
- PYTHON
- hackerrank
- ChatGPT
- Git
- programmers
- github
- 자연어처리
- dacon
- Real or Not? NLP with Disaster Tweets
- ubuntu
- Docker
- Baekjoon
- 우분투
- AI 경진대회
- 데이콘
- 프로그래머스
- 편스토랑
Archives
- Today
- Total
솜씨좋은장씨
[BaekJoon] 15686번 : 치킨 배달 (Python) 본문
728x90
반응형
코딩 1일 1문제! 오늘의 문제는 백준의 치킨 배달 입니다.
Solution
from itertools import combinations
def find_home_chicken(city_map):
home, chicken = [], []
for i, row in enumerate(city_map):
for j, col in enumerate(row):
if row[j] == 1:
home.append((i, j))
elif row[j] == 2:
chicken.append((i, j))
return home, chicken
def get_home_chicken_distance(home_point, chicken_point):
return abs(home_point[0] - chicken_point[0]) + abs(home_point[1] - chicken_point[1])
def chicken_delivery(max_chicken, city_map):
home, chicken = find_home_chicken(city_map=city_map)
number_of_cases = list(combinations(chicken, max_chicken))
case_distance = [0 for _ in range(len(number_of_cases))]
for i in range(len(home)):
for j in range(len(number_of_cases)):
dist = 100
for case in number_of_cases[j]:
dist = min(dist, get_home_chicken_distance(home[i], case))
case_distance[j] += dist
return min(case_distance)
if __name__ == "__main__":
city_map = []
N, M = map(int, input().split())
for i in range(N):
city = list(map(int, input().split()))
city_map.append(city)
print(chicken_delivery(max_chicken=M, city_map=city_map))
Solution 풀이
먼저 입력 받은 2차원 배열에서 집과 치킨집의 위치를 찾아 따로 home과 chicken 리스트에 담아둡니다.
그 다음 내가 남겨둬야하는 치킨집의 개수 정보 N과 Python itertools의 combinations를 활용하여
N개씩 묶인 치킨집 조합을 구하여 number_of_cases에 넣어 줍니다. ( 내가 남겨두는 치킨집의 모든 경우의 수 )
각 케이스마다의 치킨거리를 저장할 리스트를 list comprehension을 활용하여 만들어줍니다.
그럼 이제 각 케이스와 아까 찾아둔 집 위치 정보를 활용하여 각 치킨집과 집과의 거리를 구해
치킨 거리를 구합니다.
거리를 구하는 함수는 get_home_chicken_distance로 만들어주었습니다.
각 케이스마다 치킨거리가 구해지면 그 중 가장 작은 값을 최종적으로 출력하도록 하면 끝입니다.
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 1371번 : 가장 많은 글자 (Python) (0) | 2021.08.17 |
---|---|
[BaekJoon] 2439번 : 별 찍기 - 2 (Python) (0) | 2021.08.16 |
[BaekJoon] 10757번 : 큰 수 A+B (Python) (0) | 2021.08.14 |
[BaekJoon] 11399번 : ATM (Python) (0) | 2021.08.13 |
[Programmes] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) - 로또의 최고 순위와 최저 순위 (Python) (0) | 2021.08.12 |
Comments