728x90
문제
https://www.acmicpc.net/problem/15686
풀이
백트래킹을 사용해 풀었습니다.
home
에 집 위치를, chicken
에 치킨집 위치를 저장합니다.
DFS를 사용해 M
개의 치킨집을 선택해 도시의 치킨 거리를 구합니다.
※ 치킨집은 많을수록 최소 거리에 유리합니다.
코드
파이썬
import sys
input = sys.stdin.readline
INF = sys.maxsize
N, M = map(int, input().split())
board = [list(input().split()) for _ in range(N)]
home = []
chicken = []
for i in range(N):
for j in range(N):
if board[i][j] == "1":
home.append((i, j))
elif board[i][j] == "2":
chicken.append((i, j))
answer = INF
n = len(chicken)
stack = []
check = [False] * n
def DFS(start):
global answer
if len(stack) == M:
total = 0
for r1, c1 in home:
dist = []
for r2, c2 in stack:
dist.append(abs(r1 - r2) + abs(c1 - c2))
total += min(dist)
answer = min(answer, total)
else:
for i in range(start, n):
if not check[i]:
check[i] = True
stack.append(chicken[i])
DFS(i + 1)
stack.pop()
check[i] = False
DFS(0)
print(answer)
728x90
'🚩 코딩테스트 > 알고리즘' 카테고리의 다른 글
[백준] 1753번: 최단경로 (0) | 2023.05.11 |
---|---|
[백준] 14500번: 테트로미노 (1) | 2023.05.10 |
[백준] 10986번: 나머지 합 (0) | 2023.05.09 |
[백준] 1806번: 부분합 (0) | 2023.05.08 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2023.03.16 |