[백준] 치킨배달(Python) - 구현 & 백트래킹

2022. 5. 23. 19:02·Algorithms 💻/BAEKJOON
반응형

# 문제 

문제가 언뜻 보면 복잡해보이지만, 사실 M개의 치킨집을 선택하는 최적의 입지를 구하는 문제다. 여기서 최적의 입지의 기준이란 각 집으로부터 "치킨거리"의 합이 가장 작아지는 M개의 치킨집을 고르는 경우를 구하는 것 !  "치킨거리"를 구하는 공식 또한 인덱스를 기준으로 하기에 그렇게 어렵지 않다. 

 

# 입출력 

 

# Idea

 

# Code

우선 이 문제는 구현과 백트래킹으로 풀 수 있으므로, 구현으로 푸는 방법을 먼저 소개하겠다. itertools의 combination 함수를 이용하면 쉽게 구현 가능하다. 

"""
치킨 배달 
  - Combination으로 먼저 풀기
"""
from itertools import combinations

# 해당 치킨집 조합과 1들의 거리를 리턴하는 함수 
def distance(one_list, two_ele) : 
  dis = 0 
  for one_ele in one_list : 
    how_min = 99999 
    for t in two_ele : 
      # 둘 중 min 값만 저장 
      how_min = min(abs(one_ele[0] - t[0]) + abs(one_ele[1] - t[1]), how_min)
    dis += how_min
  return dis


if __name__ == '__main__':
  N, M = map(int, input().split())
  m = []     # map 
  result = 999999    # 도시의 치킨거리 최솟값 

  for _ in range(N):
    m.append(list(map(int, input().split())))

  # 1과 2 위치 적재 
  ones = [] ; twos = []
  for i in range(N):
    for j in range(N):
      if m[i][j] == 1 : 
        ones.append((i+1, j+1))   # 튜플로 적재 
      elif m[i][j] == 2 : 
        twos.append((i+1, j+1))

  chi = list(combinations(twos, M))       # 치킨집 M개 고르는 경우의 수 

  # 치킨집 조합별 반복문 
  for two_ele in chi : 
    result = min(result, distance(ones, two_ele))

  print(result)

 

반응형
저작자표시 (새창열림)

'Algorithms 💻 > BAEKJOON' 카테고리의 다른 글

[백준] 스타트와 링크(Python) - 백트래킹  (0) 2022.05.05
[백준] N-Queens 문제(Python) - 백트래킹  (2) 2022.04.27
[백준] 1,2,3 더하기(Python) - 백트래킹 & 1차원 dfs 탐색  (0) 2022.04.20
[백준] 로또(Python) - 백트래킹 & 1차원 dfs 탐색  (0) 2022.04.07
[백준] 에디터(Python) - Stack  (0) 2022.03.26
'Algorithms 💻/BAEKJOON' 카테고리의 다른 글
  • [백준] 스타트와 링크(Python) - 백트래킹
  • [백준] N-Queens 문제(Python) - 백트래킹
  • [백준] 1,2,3 더하기(Python) - 백트래킹 & 1차원 dfs 탐색
  • [백준] 로또(Python) - 백트래킹 & 1차원 dfs 탐색
당니이
당니이
씩씩하게 공부하기 📚💻
  • 당니이
    다은이의 컴퓨터 공부
    당니이
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Achieved 👩🏻 (14)
        • 생각들 (2)
        • TIL (6)
        • Trial and Error (1)
        • Inspiration ✨ (0)
        • 미국 박사 준비 🎓 (1)
      • Computer Vision💖 (39)
        • Basic (9)
        • Video (5)
        • Continual Learning (7)
        • Generative model (2)
        • Domain (DA & DG) (5)
        • Multimodal (8)
        • Multitask Learning (1)
        • Segmentation (1)
        • Colorization (1)
      • RL 🤖 (1)
      • Autonomous Driving 🚙 (11)
        • Geometry (4)
        • LiDAR 3D Detection (1)
        • Trajectory prediction (2)
        • Lane Detection (1)
        • HDmap (3)
      • Linux (15)
      • PyTorch👩🏻‍💻 (10)
      • Linear Algebra (2)
      • Python (5)
      • NLP (10)
        • Article 📑 (1)
      • Algorithms 💻 (22)
        • Basic (8)
        • BAEKJOON (8)
        • Programmers (2)
      • ML (1)
        • 통계적 머신러닝(20-2) (1)
      • SQL (3)
      • 기초금융 💵 (1)
  • 블로그 메뉴

    • 홈
    • About me
  • 링크

    • 나의 소박한 github
    • Naver 블로그
  • 공지사항

  • 인기 글

  • 태그

    pytorch
    Python
    continual learning
    Linux
    CL
    conda
    코딩테스트
    리눅스
    백준
    Incremental Learning
    알고리즘
    domain adaptation
    til
    dfs
    백트래킹
    domain generalization
    자료구조
    LLM
    CV
    NLP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
당니이
[백준] 치킨배달(Python) - 구현 & 백트래킹
상단으로

티스토리툴바