[BOJ 16236]小さなサメ(Python)
14250 ワード
質問する
リンク
復習する
に答える
これは容易ではない問題だ.以前から、私はシミュレーションと実施の問題に困難を感じて、私はもっと努力してそれを克服して征服します...
シミュレーション問題は,与えられた条件と進行方式に従って逐次漸進的に実施できる.条件と探索を行うコードの順序と方式が重要だと思います.
これは容易ではない問題だ.以前から、私はシミュレーションと実施の問題に困難を感じて、私はもっと努力してそれを克服して征服します...
シミュレーション問題は,与えられた条件と進行方式に従って逐次漸進的に実施できる.条件と探索を行うコードの順序と方式が重要だと思います.
小さなサメの起点を見つけて、行列に入れます.
今はサメの位置で最短距離のテーブルを釣っています.
生成された距離表と魚の大きさ表から,最短距離で食べられる魚を見つけた後に要する時間を計算する.
魚が食べられないか存在しないまで、上記の手順を繰り返します.
コード#コード# import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
aqua = [list(map(int, input().split())) for _ in range(N)]
size = 2
sx, sy = 0, 0
# 아기상어 출발 시작점 찾기 (1번만 수행)
for r in range(N):
for c in range(N):
if aqua[r][c] == 9:
sx, sy = r, c
aqua[r][c] = 0
dir = [[-1, 0], [1, 0], [0, -1], [0, 1]]
# 현재 아기상어 위치에서 최단거리 테이블을 계산하는 함수
def bfs():
distance = [[-1] * N for _ in range(N)]
q = deque([(sx, sy)])
distance[sx][sy] = 0
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dir[i][0]
ny = y + dir[i][1]
if 0 <= nx < N and 0 <= ny < N:
if distance[nx][ny] == -1 and aqua[nx][ny] <= size:
distance[nx][ny] = distance[x][y] + 1
q.append((nx, ny))
return distance
# 계산된 거리테이블과 크기테이블을 통해 먹을 물고기 탐색 (공간안에 있고 아기상어 크기보다 작은 물고기만 먹게)
def hunt(distance):
minimum = 1e9
x, y = 0, 0
for i in range(N):
for j in range(N):
if distance[i][j] != -1 and 1 <= aqua[i][j] < size:
if distance[i][j] < minimum:
x, y = i, j
minimum = distance[i][j]
if minimum == 1e9:
return 0
else:
return x, y, minimum
answer = 0
count = 0
while True:
fish = hunt(bfs())
if fish == 0:
print(answer)
break
else:
sx, sy = fish[0], fish[1]
answer += fish[2]
aqua[sx][sy] = 0
count += 1
if count == size:
size += 1
count = 0
Reference
この問題について([BOJ 16236]小さなサメ(Python)), 我々は、より多くの情報をここで見つけました
https://velog.io/@kimdukbae/BOJ-16236-아기-상어-Python
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
aqua = [list(map(int, input().split())) for _ in range(N)]
size = 2
sx, sy = 0, 0
# 아기상어 출발 시작점 찾기 (1번만 수행)
for r in range(N):
for c in range(N):
if aqua[r][c] == 9:
sx, sy = r, c
aqua[r][c] = 0
dir = [[-1, 0], [1, 0], [0, -1], [0, 1]]
# 현재 아기상어 위치에서 최단거리 테이블을 계산하는 함수
def bfs():
distance = [[-1] * N for _ in range(N)]
q = deque([(sx, sy)])
distance[sx][sy] = 0
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dir[i][0]
ny = y + dir[i][1]
if 0 <= nx < N and 0 <= ny < N:
if distance[nx][ny] == -1 and aqua[nx][ny] <= size:
distance[nx][ny] = distance[x][y] + 1
q.append((nx, ny))
return distance
# 계산된 거리테이블과 크기테이블을 통해 먹을 물고기 탐색 (공간안에 있고 아기상어 크기보다 작은 물고기만 먹게)
def hunt(distance):
minimum = 1e9
x, y = 0, 0
for i in range(N):
for j in range(N):
if distance[i][j] != -1 and 1 <= aqua[i][j] < size:
if distance[i][j] < minimum:
x, y = i, j
minimum = distance[i][j]
if minimum == 1e9:
return 0
else:
return x, y, minimum
answer = 0
count = 0
while True:
fish = hunt(bfs())
if fish == 0:
print(answer)
break
else:
sx, sy = fish[0], fish[1]
answer += fish[2]
aqua[sx][sy] = 0
count += 1
if count == size:
size += 1
count = 0
Reference
この問題について([BOJ 16236]小さなサメ(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@kimdukbae/BOJ-16236-아기-상어-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol