まえがき
前回 入力編 の続きです.
はじめに
競技プログラミングでは,標準出力にスペースまたは改行で区切られた大量の数値や文字列を書き出すことがよくあります.(以下,前回 と同じなので略)
答え: bufio.Writer を使う
大量の出力を高速に行なうためには,
- 出力をバッファする
- 細かい単位でフラッシュしない
ことが必要です.os.Stdout
や fmt.Println
はここまで面倒をみてくれないので,bufio.Writer
を使います.出力が短かいので効果の出る例ではありませんが,サンプルです:
package main
import (
"bufio"
"fmt"
"os"
)
var wtr = bufio.NewWriter(os.Stdout)
func main() {
fmt.Fprintln(wtr, "Hello")
fmt.Fprintln(wtr, "World")
_ = wtr.Flush()
}
これを実行してみます.
$ go run main.go
Hello
World
標準出力に書き出されているのを確認できます.
おわりに
今回は競技プログラミングにありがちな,標準出力への書き出しをより速く行う方法を考えてみました.今回使ったパッケージ,関数などを整理します.
- bufio
NewWriter
Writer.Flush
- fmt
Fprintln
- os
Stdin
入力と違って標準で備わっているものが十分使い易いので,ライブラリとして整備するほどでもないでしょうか.Java だと java.io.PrintWriter
あたりに相当しそうです.