paizaの練習問題を解く 移動が可能かの判定・方角 Go編
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 移動が可能かの判定・方角 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 実装 最初は以下のように実装しました。 package main import "fmt" func main(){ var h, w, sx, sy int var m string fmt.Scan(&h, &w, &sy, &sx, &m) d := make([]string, h) for i := 0; i < h; i++ { fmt.Scan(&d[i]) } switch m { case "E": sx++ case "W": sx-- case "S": sy++ case "N": sy-- } if sy >= h || sx >= w || d[sy][sx] == '#' { fmt.Println("No") } else { fmt.Println("Yes") } } ですが、実行してみるとうまくいかないテストケースがありました。 それもそうで、syとsxが負の値の場合の考慮が漏れていたためです。 これを修正してやることでうまくうごきました。 package main import "fmt" func main(){ var h, w, sx, sy int var m stringze fmt.Scan(&h, &w, &sy, &sx, &m) d := make([]string, h) for i := 0; i < h; i++ { fmt.Scan(&d[i]) } switch m { case "E": sx++ case "W": sx-- case "S": sy++ case "N": sy-- } if sy >= h || sx >= w || sy < 0 || sx < 0 || d[sy][sx] == '#' { fmt.Println("No") } else { fmt.Println("Yes") } } 👍