こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
移動が可能かの判定・方角 | レベルアップ問題集 | プログラミング学習サイト【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")
}
}
👍