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

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

今回の問題は以下です。

RPG | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

以下のように実装しました。

package main
import "fmt"
type Hero struct {
    l int
    h int
    a int
    d int
    s int
    c int
    f int
}
func main(){
    var n, k int
    fmt.Scan(&n, &k)
    heroes := make([]Hero, n)
    for i := 0; i < n; i++ {
        fmt.Scan(
            &heroes[i].l,
            &heroes[i].h,
            &heroes[i].a,
            &heroes[i].d,
            &heroes[i].s,
            &heroes[i].c,
            &heroes[i].f,
        )
    }
    for i := 0; i < k; i++ {
        var e string
        var j int
        fmt.Scan(&j, &e)
        switch e {
            case "levelup":
                var h, a, d, s, c, f int
                fmt.Scan(&h, &a, &d, &s, &c, &f)
                heroes[j - 1].l++
                heroes[j - 1].h += h
                heroes[j - 1].a += a
                heroes[j - 1].d += d
                heroes[j - 1].s += s
                heroes[j - 1].c += c
                heroes[j - 1].f += f
            case "muscle_training":
                var h, a int
                fmt.Scan(&h, &a)
                heroes[j - 1].h += h
                heroes[j - 1].a += a
            case "running":
                var d, s int
                fmt.Scan(&d, &s)
                heroes[j - 1].d += d
                heroes[j - 1].s += s
            case "study":
                var c int
                fmt.Scan(&c)
                heroes[j - 1].c += c
            case "pray":
                var f int
                fmt.Scan(&f)
                heroes[j - 1].f += f
        }
    }
    for i := 0; i < n; i++ {
        fmt.Println(
            heroes[i].l,
            heroes[i].h,
            heroes[i].a,
            heroes[i].d,
            heroes[i].s,
            heroes[i].c,
            heroes[i].f,
        )
    }
}

条件分岐とかがちょっと長いですが、まぁ一つ構造体作ってあげればすぐ実装できました。

ということで今回はこれで👍