見出し画像

【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列のデータの入力」と続きますが、後日、別記事で取り上げる予定です。

この記事が気に入ったらサポートをしてみませんか?