こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

時刻に伴う移動 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

結構躓きましたが、最終的にこのように実装しました。

package main
import "fmt"
func main(){
    var h, w, sy, sx, n int
    fmt.Scan(&h, &w, &sy, &sx, &n)
    
    s := make([]string, h)
    for i := 0; i < h; i++ {
        fmt.Scan(&s[i])
    }
    
    // 現在の時間
    ct := 0
    // 現在の方向
    cd := 120
    dir := []string{"N", "E", "S", "W"}
    for i := 0; i < n; i++ {
        var t int
        var d string
        fmt.Scan(&t, &d)
        
        lr := 1
        if d == "L" {
            lr = -1
        }
        l := t - ct
        // fmt.Println("l: ", l)
        for j := 0; j < l; j++ {
            switch dir[cd%4] {
                case "N": sy--
                case "S": sy++
                case "E": sx++
                case "W": sx--
            }
            if sy >= h || sx >= w || sy < 0 || sx < 0 || s[sy][sx] == '#' {
                fmt.Println("Stop")
                return
            } else {
                fmt.Println(sy, sx)
            }
        }
        ct = t
        cd += lr
    }
}

十分すっきり実装できていますね👍

満足です。