![見出し画像](https://assets.st-note.com/production/uploads/images/112965020/rectangle_large_type_2_9a1fedf111fc61485e87651b4a04b716.jpg?width=1200)
【Go言語】標準入力(1)
paizaラーニングのスキルチェックで意外と鬼門(時間がかかる)なのが、標準入力からデータを受け取る部分のコーディングです。そのため、paizaラーニングの問題集で練習しました。
標準入力メニューをすべて100点通過できたので、解答例を挙げてみたいと思います。
Go言語でのコーディングにおける注意点
Go言語では、「宣言した変数を後で使わない」「インポートしたライブラリを使わない」といった場合にコンパイルエラーになります。
この点は、競技プログラミング用includeもりもりテンプレートが使えるC/C++と違って若干不便を感じます。
行入力
「1行の入力」では次のように書けます。2行、3行でも同様に変数を別個に用意し、一つずつ入力と出力をコピペで書いていけば、解答は早く済みます。
package main
import "fmt"
func main(){
var n int
fmt.Scan(&n)
fmt.Println(n)
}
5行からは流石にかったるくなるので、配列やスライスを使うのが良いでしょう。僕の解答ではスライスを使いました。
package main
import "fmt"
func main(){
n := 1000
s := make([]string, n)
for i:=0; i<n; i++ {
fmt.Scan(&s[i])
fmt.Println(s[i])
}
}
コードは基本的に共通で、変数nを必要な数に置き換えて代入すれば良いです。
半角スペース区切りでの文字列の分割
この問題には入力データがなく、分割する文字列をコード内に直接記述します。strings.Split()を使うため、必要なライブラリstringsをインポートします。
package main
import (
"fmt"
"strings"
)
func main(){
s := "目的 の 文字列" // この文字列を題意に沿って変更する
arr := strings.Split(s, " ")
n := len(arr)
for i:=0; i<n; i++ {
fmt.Println(arr[i])
}
}
半角スペース区切りの入力
Pythonでは、半角スペース区切りの入力には "文字列".split() メソッドを使うのがセオリーかと思います。この場合、事前に与えられるデータ数は無視してコーディングできます。
Go言語にも strings.Split() 関数があり、同様の処理ができますが、先に述べた「宣言した変数は後で処理に使わなければならない」というルールがあるため、forループ内にfmt.Scan()を入れる手法が無難かと思われます。
package main
import "fmt"
func main(){
n := 1000
strs := make([]string, n)
var i int
for i=0; i<n; i++ {
fmt.Scan(&strs[i])
}
for i=0; i<n; i++ {
fmt.Println(strs[i])
}
}
この問題では、半角スペース区切りで与えられる入力データの数が事前にわかっているので、変数nに題意のデータ数を代入してから入力・出力をする,
というコードを使い回せます。
整数の行入力
この問題と「整数の半角スペース区切りの入力」は、同じコードがFINAL問題まで使い回せます。fmt.Scan() 関数は、入力データの区切りが改行でも半角スペースでも挙動は変わりません。C言語の scanf() のようなものですね。
bufio.Scanner() は行単位で読み込むため、半角スペース区切りの問題で使うと面倒くさいコードになります。Pythonの標準入力が面倒くさいのも同じです。
package main
import "fmt"
func main(){
var n int
fmt.Scan(&n)
a := make([]int, n) // 題意に応じて[]stringや[]float64に変える
for i:=0; i<n; i++ {
fmt.Scan(&a[i])
}
for j:=0; j<n; j++ {
fmt.Println(a[j])
}
}
N個のデータの入力(入力1行目でデータ数Nが与えられる)
はじめにデータ数Nを与え、その後N個のデータを受け取るプログラムを作ります。
N個のデータの型のみ変えれば、ここから3連の問題集(整数、文字列、実数)は同じコードで解けます。
ここから先は……
問題集はこのあと「組になったデータの入力」「N行M列のデータの入力」と続きますが、後日、別記事で取り上げる予定です。