[15686] 치킨 배달 (DFS, 브루트포스, 백트래킹)

2023. 6. 20. 12:02·Coding Test/Implement
728x90
 

15686번: 치킨 배달

크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸

www.acmicpc.net

 

분석

 

피자 배달 거리 (삼성 SW역량평가 기출문제 : DFS, 조합)

분석

karla.tistory.com

 

풀이 

"""
치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 집을 기준으로 정해지며, 각각의 집은 치킨 거리를 가지고 있다.
도시의 치킨 거리는 모든 집의 치킨 거리의 합이다.
임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다.
도시에 있는 치킨집 중에서 최대 M개를 고르고, 나머지 치킨집은 모두 폐업시켜야 한다.
도시의 치킨 거리가 가장 작게 될지 구하는 프로그램을 작성하시오.

N(2 ≤ N ≤ 50)과 M(1 ≤ M ≤ 13)
N개의 줄에는 도시의 정보, 0은 빈 칸, 1은 집, 2는 치킨집
집의 개수는 2N개를 넘지 않으며, 적어도 1개는 존재한다. 치킨집의 개수는 M보다 크거나 같고, 13보다 작거나 같다.
5 3
0 0 1 0 0
0 0 2 0 1
0 1 2 0 0
0 0 1 0 0
0 0 0 0 2
"""
import sys
input=sys.stdin.readline

n,m=map(int,input().split())
graph=[list(map(int, input().split())) for _ in range(n)]

house=[]  # 집
chicken=[]  # 치킨집
cb=[0]*m  # 조합의 경우의 수

for i in range(n):
    for j in range(n):
        if graph[i][j]==1:
            house.append((i,j))
        elif graph[i][j]==2:
            chicken.append((i,j))

res=sys.maxsize


def dfs(x,cnt):
    global res

    if x==m:  # m개를 골랐으면
        sum=0  # 도시의 치킨 거리
        # 각집의 치킨 배달 거리 구하기
        for x1,y1 in house:  # 집
            dis=sys.maxsize

            # 전체 중에 m개 고른 조합 치킨집
            for c in cb:
                x2 = chicken[c][0]
                y2 = chicken[c][1]
                dis=min(dis, abs(x1-x2)+abs(y1-y2))
            sum+=dis
        if sum<res:
            res=sum
    else:
        for i in range(cnt, len(chicken)):  # 치킨 집 선택
            cb[x]=i  # 치킨집 인덱스
            dfs(x+1,i+1)

dfs(0,0)
print(res)

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'Coding Test/Implement' 카테고리의 다른 글
  • [14891] 톱니바퀴 (deque, rotate)
  • [11559] Puyo Puyo
  • [12100] 2048 (Easy)
  • [18808] 스티커 붙이기
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Algorithm
    플로이드워셜
    스택
    힙
    이분탐색
    트리
    최대공약수
    다익스트라
    프로그래머스
    정렬
    월간코드챌린지
    DFS
    LIS
    최소신장트리
    구현
    알고리즘
    자료구조
    구간합
    조합
    최단거리
    동적계획법
    재귀
    BFS
    DP
    그리디
    덱
    백준
    파이썬
    그래프
    큐
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[15686] 치킨 배달 (DFS, 브루트포스, 백트래킹)
상단으로

티스토리툴바