LoginSignup
21
13

More than 5 years have passed since last update.

Go 言語で標準出力に書き出す競技プログラミングのアレ

Posted at

まえがき

前回 入力編 の続きです.

はじめに

競技プログラミングでは,標準出力にスペースまたは改行で区切られた大量の数値や文字列を書き出すことがよくあります.(以下,前回 と同じなので略)

答え: bufio.Writer を使う

大量の出力を高速に行なうためには,

  • 出力をバッファする
  • 細かい単位でフラッシュしない

ことが必要です.os.Stdoutfmt.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 あたりに相当しそうです.

21
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
13