22032-地形移動
7804 ワード
◾地形移動:プログラマーLEVEL 4
質問する
正四角形の地形があり、大きさはN x Nです.各グリッドのサイズは1 x 1で、各グリッドには数字があります.グリッドの数値は、グリッドの高さを表します.
この地形の任意の格子から出発して、すべての格子を訪問する探検に行きます.セルを移動するときは、上、下、左、右に1つのセルを移動できます.現在のセルと移動するセルの高さの差はheightより小さくなければなりません.高さ差がheightより大きい場合は、梯子を取り付けて移動できます.梯子を取り付けるコストは、2つのメッシュの高さ差と等しい.そのため、すべての部屋に最小限のコストで移動できるように梯子を取り付ける必要があります.取り付け可能な梯子の数は制限されず、取り付けられた梯子は取り外されません.
各グリッドの高さを含む2 D舗装土地と移動可能な最大高さ差の高さをパラメータとして指定した場合、すべてのグリッドにアクセスするために必要な梯子設置費用の最大値を返すソルバを完了します.
入力
しゅつりょく
I/O例
landheightanswer[[1, 4, 8, 10], [5, 5, 5, 5], [10, 10, 10, 10], [10, 10, 10, 20]]315[[10, 11, 10, 11], [2, 21, 20, 10], [1, 20, 21, 11], [2, 1, 2, 1]]118
のり付け
1.解説
2.プログラム
# 코드
import heapq
def solution(land, height):
answer = 0
n = len(land)
visit_point = [[False] * n for _ in range(n)]
heap_point = [[0, 0, 0]]
while heap_point:
cost, r, c = heapq.heappop(heap_point)
if visit_point[r][c] == True:
continue
visit_point[r][c] = True
answer += cost
for d_r, d_c in [[1, 0], [-1, 0], [0, 1], [0, -1]]:
new_r, new_c = r+d_r, c+d_c
if new_r < 0 or new_r >= n or new_c < 0 or new_c >= n or visit_point[new_r][new_c] == True:
continue
new_cost = abs(land[r][c] - land[new_r][new_c])
if new_cost <= height:
new_cost = 0
heapq.heappush(heap_point, [new_cost, new_r, new_c])
return answer
Reference
この問題について(22032-地形移動), 我々は、より多くの情報をここで見つけました https://velog.io/@skarb4788/220322-지형-이동テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol