見出し画像

【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言語は競プロ的なコーディングには向いてないんじゃないかと思い始めました。でも実行速度出るしなぁ……。


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