【Go言語】動的配列(paizaラーニング)
思わぬ苦戦をしたのでメモ。
解答例
模範解答はないので、自身の解答例です。
自作関数
PrintArray(arr)
配列(スライス)を半角スペース区切りで出力する関数。
ReadInts()
入力行を要素数不定の配列(スライス)に格納する関数
Go言語での注意点
スライスの要素を削除する関数はありません。代替方法はコードを参照。
package main
import (
"fmt"
"bufio"
"os"
"strings"
"strconv"
)
// PrintArray(arr)
// 配列arrを半角スペース区切りで標準出力に表示する
func PrintArray(arr []int) {
n := len(arr)
for i:=0; i<n; i++ {
fmt.Print(arr[i])
if i != n-1 {
fmt.Print(" ")
}
}
fmt.Println()
}
var sc = bufio.NewScanner(os.Stdin)
// 不特定サイズの半角スペース区切りの数値列を標準入力から受け取る
func ReadInts() []int {
sc.Scan()
fields := strings.Fields(sc.Text())
ints := make([]int, len(fields))
for i, f := range fields {
ints[i], _ = strconv.Atoi(f)
}
return ints
}
func main() {
var n, q int
fmt.Scanf("%d %d", &n, &q)
arr := make([]int, n) // 配列の初期値
var i int // カウンタ変数を使い回すための宣言
for i=0; i<n; i++ {
fmt.Scan(&arr[i])
}
// q回のクエリ処理
for i=0; i<q; i++ {
line := ReadInts()
switch line[0] {
case 0:
arr = append(arr, line[1])
case 1:
arr = arr[:len(arr)-1]
case 2:
PrintArray(arr)
}
}
}
おわりに
Go言語は競プロ的なコーディングには向いてないんじゃないかと思い始めました。でも実行速度出るしなぁ……。