반응형
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 | 29 | 30 |
Tags
- BFS
- 재귀
- 다익스트라
- 코딩테스트
- N과M
- 프로그래머스
- level0
- 가상메모리 관리
- 운영체제
- 가상메모리
- 힙
- 구현
- BOJ
- 스택
- 수학
- MYSQL
- 브루트포스
- level2
- level1
- dfs
- 백준
- level3
- 그리디
- 파이썬
- python
- 에라스토테네스의 체
- 다이나믹 프로그래밍
- 딕셔너리
- DP
- programmers
Archives
- Today
- Total
동캄의 코딩도장
백준 16236 [아기 상어] 파이썬 본문
반응형
https://www.acmicpc.net/problem/16236
16236번: 아기 상어
N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가
www.acmicpc.net
# 백준 16236 아기상어
from collections import deque
import sys
input = sys.stdin.readline
N = int(input())
field = []
dr = [-1, 0, 0, 1]
dc = [0, -1, 1, 0]
fish_cnt = 0
answer = 0
level = 2
result = 1
cnt = 0
for i in range(N):
s = list(map(int, input().split()))
for j in range(N):
if s[j] == 9:
pos = [i, j]
elif 0 < s[j] <= 6:
fish_cnt += 1
field.append(list(map(int, s)))
def bfs(pos, level):
visited = [[0]*(N) for _ in range(N)]
q = deque([])
q.append(pos)
fishes = []
min_dist = 10**6
while q:
r, c = q.popleft()
for i in range(4):
R = r+dr[i]
C = c+dc[i]
if 0 <= R < N and 0 <= C < N and not visited[R][C]:
visited[R][C] = visited[r][c]+1
if 0 < field[R][C] < level:
min_dist = visited[R][C]
fishes.append([visited[R][C], R, C])
elif field[R][C] == level and min_dist >= visited[R][C]:
q.append([R, C])
elif field[R][C] == 0 and min_dist >= visited[R][C]:
q.append([R, C])
if fishes:
fishes.sort()
return fishes[0]
else:
return False
while fish_cnt:
result = bfs(pos, level)
if result:
cnt += 1
pos_r, pos_c = pos
field[pos_r][pos_c] = 0
dist, result_r, result_c = result
answer += dist
field[result_r][result_c] = 999
pos = [result_r, result_c]
fish_cnt -= 1
if cnt == level:
cnt = 0
level += 1
else:
break
print(answer)
1) 처음 먹을 수 있는 물고기를 찾고나면 min_dist를 갱신해준다.
2) 최대 20*20이므로 아기상어의 값을 9->999로 변경해준다.
반응형
'코테 > BOJ' 카테고리의 다른 글
백준 1753 [최단경로] 파이썬 (0) | 2022.05.17 |
---|---|
백준 9019 [DSLR] 파이썬 (0) | 2022.04.18 |
백준 1377 [버블 소트] 파이썬 (0) | 2022.04.16 |
백준 13549 [숨바꼭질3] 파이썬 (0) | 2022.04.16 |
백준 2096 [내려가기] 파이썬 (0) | 2022.04.16 |