Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 도커
- CS
- Spring Security
- 프로세스
- 백준 1120
- 백준 2529
- 백트래킹
- docker
- 프로그래머스
- 백준 15686
- 락
- 백준 14499
- 백준 파이썬
- 백준
- 증가하는부분수열
- 파이썬
- 다익스트라
- 스프링
- 9465 스티커
- CI/CD
- 백준 10819
- 후위 표기식
- 백준 2302
- 코테
- 운영체제
- 네이버
- 스레드
- Spring
- 자바스크립트
- 코딩테스트
Archives
- Today
- Total
개발
[백준] 15686 치킨배달 (파이썬) 본문
전형적인 백트래킹 문제인데 처음 풀때 거리 계산을 굳이 bfs를 이용해서 풀려고 해서 시간을 많이 잡아 먹었다.
폐업하지 않는 치킨집을 선별할때 검색해서 나오는 많은 해답들은 조합을 이용해서 후보를 선정했다.
이러한 방법을 생각하지 못했는데 편한 방법이긴 한 것 같다.
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
board = [list(map(int,input().split())) for _ in range(n)]
home, chick = [], []
for i in range(n):
for j in range(n):
if board[i][j] == 1:
home.append((i,j))
elif board[i][j] == 2:
chick.append((i,j))
candidate = set([])
ans = sys.maxsize
def choose(res, idx):
global ans, candidate
if res == m:
tmp = 0
for i in range(len(home)):
x1, y1 = home[i]
cnt = sys.maxsize
for j in candidate:
x2, y2 = j
dis = abs(x1-x2) + abs(y1-y2)
if dis < cnt:
cnt = dis
tmp += cnt
if tmp < ans:
ans = tmp
return 0
for i in range(idx, len(chick)):
candidate.add(chick[i])
choose(res+1, i+1)
candidate.remove(chick[i])
choose(0, 0)
print(ans)'알고리즘 > 문제' 카테고리의 다른 글
| [백준] 14499 주사위 굴리기 (파이썬) (0) | 2022.08.29 |
|---|---|
| [백준] 2529 부등호 (파이썬) (0) | 2022.08.01 |
| [백준] 1120 문자열 (파이썬) (0) | 2022.07.29 |
| [백준] 2302 극장 좌석 (파이썬) (0) | 2022.07.20 |
| [백준] 9465 스티커 (파이썬) (0) | 2022.07.20 |