カメヲラボ

主にプログラミングとお勉強全般について書いてます

CodeIQ過去問集36:まっすぐ行こう

本稿はCodeIQで2016年7月12日~2018年4月25日に出題された 【実力判定:Sランク】まっすぐ行こう という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

まっすぐ行こう

【問題】

M×Nのマス目を左上から右下に向かって移動します。移動方向は上下左右のみです。 ただし、マス目上には通れない箇所がいくつかあります。同じ点を2回以上通過しても構いません。

上図の黄色い部分をスタート、青い部分をゴールとし、黒い部分は通れないものとします。 このとき、スタートからゴールまでの経路はいくつか考えられますが、できるだけ方向転換の回数が少ない経路を見つけてください。

左図の経路では方向転換(★印の部分が)2か所ですが、右図では方向転換が1か所だけですので、このケースでは1回の方向転換でゴールまで到達できることになります。

【入力】

標準入力から、1行目に半角スペースで区切られた2つの整数値M, N(1≦M, N≦64)が与えられます。 2行目から(M+1)行目までは長さNの文字列です。文字列は、' .'と'#'で構成されています。 '.'は移動できる部分、'#'は移動できない部分を表します。 2行目の1文字目と、(M+1)行目のN文字目、つまりスタート地点とゴール地点に相当する点は必ず'.'になっています。 また、スタートからゴールに到達する経路が必ず存在するものとします。

【出力】

マス目の左上から右下まで移動する経路の中で、方向転換する回数の最小値を、標準出力に出力してください。

【入出力サンプル】

Input

2 3
..#
...

Output

1

【解答方法】

[massugu.zip]をダウンロードし、展開してください。中には以下のフォルダが含まれています。

  • input: テストデータです
  • output: 解答データです

テストデータを入力として、解答データと一致する出力になるようなプログラムを書いてください。

(解説は後日)