AtCoder Beginner Contest 176をPythonで解く

投稿日: 

Atcoder Python

B!
Daniel AgreloによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回はAtCoder Beginner Contest 176を, Pythonで解いてみた結果を書き連ねていこうと思います.

A - Takoyaki

割り算の商をA // Bで, 剰余をA % Bで計算します.

B - Multiple of 9

Pythonでは文字列をリストにすると, その文字列の各文字が各要素にそのまま入ったリストが得られます. この各要素をint型に変換し, 合計を求めて$9$で割った剰余を調べます.

C - Sum of product of pairs

前の人の高さ(踏み台含)よりその人の方が低いか否かを判断していきます. まずは, 最小の踏み台の高さのリストを作成していき, その合計を出力する例です.

あるいは, 最小の踏み台の高さのリスト自体は必要ないので, 「最小の踏み台の高さを足していく変数」と「それまでの人の高さの最大値(踏み台含)を記録していく変数」を用意して計算することで, 実行時間を若干減らすことができます.

D - Wizard in Maze

AtCoder Beginner Contest 177の「D - Friends」と同様に, 幅優先探索(breadth first search; BFS)と呼ばれる方法を用います. スタート地点から移動A・Bで移動できるマスをまず調べ上げ, 次にそれらのマス全てから移動A・Bで移動できるマスを調べます. これを繰り返していくことで, 移動できるマス全てにおける移動「コスト」(移動Bをしなければならない回数)が分かります.

注意点としては, 「他にももっと簡単に移動できる方法があったのに!」という可能性です. 以下のコードでは, 「移動Aで移動できるマス→それらから移動Bで移動できるマス→それらから移動Aで移動できるマス→それらから移動Bで移動できるマス→……」というように調べています(移動履歴がすでに存在するマスから移動A・Bで移動できるかどうかは調べません). このようにすることで移動Bが最も少ない移動パターンを先に調べられるので, 「他にももっと簡単に移動できる方法があったのに!」という可能性はなくなります.

なお, 「移動先の地点を調査するべき地点リスト」には, AtCoder Beginner Contest 177の「D - Friends」と同様にdeque型を用いると, 計算量を減らすことができます.

E以降

E以降は私の能力不足故に省略いたします.

参考にしたサイト等

Search

About Me

自分の写真
理系大学生でした. Bloggerを利用して発信を行っています.

Labels

Blog Archives