paizaの練習問題を解く 盤面の情報取得 Go編

こんにちは、ナナオです。 せっかくGoのチュートリアルを終えたので、今度は実践編ということでpaizaの練習問題を解いていこうと思います。 今回はこちらの問題です。 盤面の情報取得 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 まず標準入力をどうするか 最初の問題にふさわしいというか、標準入力のやり方がまだよく分かっていないので助かります。 入力は以下のような形式です。 H W N S_0 ... S_(H-1) y_1 x_1 ... y_N x_N 最初の一行は割と簡単に取得できます。 var h, w, n int fmt.Scan(&h, &w, &n) その後の行については以下のサイトを参考に実装しました。 【備忘】Go 言語の標準入力の基本的なこと #初心者向け - Qiita sc := bufio.NewScanner(os.Stdin) s := make([][]string, h) for i := 0; i < h; i++ { sc.Scan() s[i] = strings.Split(sc.Text(), "") } うーん、まぁここはもっとスマートに出来そうな気がしますが、とりあえずこれで。。 実装 標準入力ができればあとは割と簡単に実装できます。 全体の実装は以下の通りです。 package main import ( "fmt" "bufio" "os" "strings" "strconv" ) func main(){ var h, w, n int fmt.Scan(&h, &w, &n) sc := bufio.NewScanner(os.Stdin) s := make([][]string, h) for i := 0; i < h; i++ { sc.Scan() s[i] = strings.Split(sc.Text(), "") } for i := 0; i < n; i++ { sc.Scan() inputs := strings.Split(sc.Text(), " ") y, _ := strconv.Atoi(inputs[0]) x, _ := strconv.Atoi(inputs[1]) fmt.Println(s[y][x]) } } str -> intの変換にstrconvを使わなきゃいけなかったりするあたりがちょっと面倒ですが、まぁ静的言語のありがたい部分でもあります。 ...

2026年2月14日 · にあえん