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

2023. 5. 9. 00:41·Coding Test/Combination
728x90

분석

 

조합 구하기(DFS)

분석 매개변수 s : 가지를 받는 첫번째 수(for문 시작 숫자) 풀이 """ 1~N 번호 구슬, M개 뽑는 방법의 수 출력 N(3

karla.tistory.com

 

풀이

"""
N×N 크기의 도시지도, 0은 빈칸, 1은 집, 2는 피자집
각 집의 피자배달거리는 해당 집과 도시의 존재 하는 피자집들과의 거리 중 최소값
집과 피자집의 피자배달거리는 |x1-x2|+|y1-y2|

도시에 있는 피자집 중 M개만 살리고 나머지는 폐업
살리고자 하는 피자집 M개를 선택하는 기준으로 도시의 피자배달거리가 최소가 되는 M개의 피자집을 선택

N(2≤N≤50), M(1≤M≤12)
4 4
0 1 2 0
1 0 2 1
0 2 1 2
2 0 1 2
"""
import sys
input=sys.stdin.readline

n,m=map(int,input().split())
graph=[list(map(int, input().split())) for _ in range(n)]
hs=[] # 집
pz=[] # 피자집
cb=[0]*m # 조합의 경우의 수
res=sys.maxsize

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


def dfs(x,s):
    # s: 가지를 뻗는 첫번째 수 (for문 시작 숫자)
    global res
    if x==m:
        sum=0 # 도시의 피자거리
        # 각집의 피자배달 거리 구하기
        for j in hs: # 집
            x1=j[0]
            y1=j[1]
            dis=sys.maxsize
            for x in cb: # 전체 중에 m개 고른 조합 피자집
                x2=pz[x][0]
                y2=pz[x][1]
                dis=min(dis, abs(x1-x2)+abs(y1-y2))
                # print(j, pz[x], dis)
            sum+=dis

        if sum<res:
            res=sum
    else:
        for i in range(s, len(pz)):
            cb[x]=i
            dfs(x+1,i+1)

dfs(0,0)
print(res)

 

 

 

 

728x90
저작자표시 (새창열림)
'Coding Test/Combination' 카테고리의 다른 글
  • [1010] 다리 놓기
  • [11051] 이항계수
  • 수들의 조합(DFS)
  • 중복순열 구하기(itertools 라이브러리)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (460)
      • AI (0)
      • Infra (13)
        • Architecture (2)
        • Kubernetes (5)
        • Docker (3)
        • Cloud (1)
        • DevOps (1)
        • Monitoring (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Spring (19)
      • JPA (4)
      • Language (9)
        • Kotlin (1)
        • Java (8)
      • Git (4)
      • DB (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)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    조합
    자료구조
    DFS
    트리
    구간합
    정렬
    BFS
    재귀
    큐
    월간코드챌린지
    최단거리
    동적계획법
    백준
    Algorithm
    프로그래머스
    알고리즘
    파이썬
    그리디
    구현
    덱
    최소신장트리
    DP
    최대공약수
    힙
    플로이드워셜
    LIS
    그래프
    이분탐색
    스택
    다익스트라
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
피자 배달 거리 (삼성 SW역량평가 기출문제 : DFS, 조합)
상단으로

티스토리툴바