はじめに
paizaの新作プログラミングゲーム【電脳少女プログラミング2088 ─壊レタ君を再構築─】カジノ(paizaランク:D相当)をやってみました。
問題
あなたはカジノにやってきました。
カジノで使われるチップは 1 ドルのもの 5 ドルのもの 10 ドルのものがあるようです。
各チップの枚数が 1 ドル, 5 ドル, 10 ドルの順で改行区切りで与えられるので合計で何ドルかを出力してください。
解答
単純な書き方
package main
import "fmt"
func main() {
var n [3]int
fmt.Scan(&n[0], &n[1], &n[2])
fmt.Println(n[0] + 5*n[1] + 10*n[2])
}
解説
-
fmt.Scan()
を使用して、標準入力から3つの整数を読み取ります。-
n[0]
:1ドルチップの枚数 -
n[1]
:5ドルチップの枚数 -
n[2]
:10ドルチップの枚数
-
- 合計金額を計算するために、それぞれのチップの枚数にその価値を掛けます。
- 1ドルチップ:
n[0] * 1
- 5ドルチップ:
n[1] * 5
- 10ドルチップ:
n[2] * 10
- 1ドルチップ:
- それらを合計し、
fmt.Println()
で出力します。
bufioを用いて入力を行う場合
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
var n [3]int
for i := 0; i < 3; i++ {
scanner.Scan()
n[i], _ = strconv.Atoi(scanner.Text())
}
fmt.Println(n[0] + 5*n[1] + 10*n[2])
}
解説
-
bufio.Scanner
を使用して、標準入力から行単位でデータを読み取ります。 - ループを使って3回
scanner.Scan()
を呼び出し、それぞれの入力行を取得します。 -
strconv.Atoi()
で文字列を整数に変換します。 - 合計金額の計算と出力は前の例と同じです。
今回学んだこと
-
標準入力からの値の受け取り方法
基本的なfmt.Scan()
に加え、
bufio.Scanner
での入力受取を実装した。
実装速度において、小規模データではほぼ同じだが、大規模データ(数百〜数万の入力)では、bufioが数倍〜数十倍高速になる。
↓ fmtとburioの違い
-
文字列から数値への変換
文字列→数値:strconv.Atoi()
数値→文字列:strconv.Itoa()