paizaラーニング グリッド版ダイクストラ問題セット:問題0 グリッド上の移動(Python解答例)

スポンサーリンク

はじめに

ダイクストラ法の解説はプログラミングに詳しい人が色々書いているのでそちらを参考にして欲しい。paizaの問題ページを開くと「paiza開発日誌で詳しく解説しています」という記述があるのだが、言語がJavaなのでPythonしか知らないプログラミング初心者の筆者には全く分からなかった。しかし、なんとなく面白そうだったので雰囲気から察して解いてみたところ一応全部出来たので、初心者なりに説明記事を書いてみようと思う。Pythonでpaizaのダイクストラ法問題の解き方を書いている人がいないので、私の記事が多少なりとも役立つかもしれない。

次の問題の解説記事
paizaの問題へのリンク(グリッド版ダイクストラ問題セット)

(プログラミング初心者による)解説

基本部分

第0問は難しいことを考えなくても解けると思うのだが、この先のために以下の書き方の意味を理解して欲しい。「右、上、左、下」を「R, U, L, D = 0, 1, 2, 3」で表すことによってdx[i],dy[i]としたときに狙った方向の値だけを動かすことが出来る。RやLの時はdy(縦方向)の移動がゼロになり、UやDの時はdx(横方向)がゼロになるという仕組みになっている。下後半はpaizaで出てくる問題によく使うものなので省略。

dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
R, U, L, D = 0, 1, 2, 3

H, W = map(int, input().split())
graph = []
for i in range(H):
    graph.append([int(_) for _ in input().split()])

初期位置はx, y = 0, 0で、動き方はmoves、カウントはtotalで管理する。ここまでの説明で引っかかった場合はもう少し基礎的な問題をやったほうが良いかもしれない。

x, y = 0, 0
moves = [R, D, R, U, L]
total = 0

for i in moves:
    x += dx[i]
    y += dy[i]
    total += graph[y][x]

print(total)

コード全体

dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
R, U, L, D = 0, 1, 2, 3

H, W = map(int, input().split())
graph = []
for i in range(H):
    graph.append([int(_) for _ in input().split()])

x, y = 0, 0
moves = [R, D, R, U, L]
total = 0

for i in moves:
    x += dx[i]
    y += dy[i]
    total += graph[y][x]

print(total)

「pandasでpaiza問題」記事一覧へのリンク

コメント

当ブログのコンテンツが気に入ったら広告ブロックの解除(ホワイトリスト化)をご検討下さい。

Please disable your adblocker or whitelist this site!

タイトルとURLをコピーしました