はじめに
Golangで配列の追記、配列のデータ型を指定する方法を調べて実装したので記事で紹介します。
問題
テレビをつけると、スキー大会が行われていました。今とあるスポーツ選手の出番が終わり、5 人の審査員から、それぞれ得点が発表されました。i(1 ≦ i ≦ 5) 番目の審査員は、選手の演目に S_i 点の得点を付けました。
このスポーツ選手の最終的な得点は、審査員がつけた得点の最大値と最小値を除いたものの総和になるので、その得点を求めてください。
実装したソースコード
実装したソースコードは下記の通りです。
/ 標準入力から1行の整数列を読み取り、合計値から最大値と最小値を1つずつ除いた値を出力する。
// 採点結果から最高点・最低点を除外するような、「外れ値を除いた合計」を求めるプログラム。
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
sc := bufio.NewScanner(os.Stdin)
sc.Scan()
input := sc.Text()
values := strings.Split(input, " ")
// 最大値・最小値は、固定の番兵値ではなく先頭要素で初期化する。
// NOTE: 入力値の制約が変わっても、初期値が原因で誤判定しないようにするため。
firstValue, _ := strconv.Atoi(values[0])
sum := 0
maxValue := firstValue
minValue := firstValue
for i := 0; i < len(values); i++ {
value, _ := strconv.Atoi(values[i])
sum += value
if value > maxValue {
maxValue = value
}
if value < minValue {
minValue = value
}
}
// 合計から最大値と最小値を1つずつ除外した値を求める。
answer := sum - maxValue - minValue
fmt.Println(answer)
}
ポイント
GoのVer1.21以降の場合、slicesライブラリで配列の要素の最大値、最小値を求めるメソッドがあるので簡単に実装できますが、GoのVer1.20以前のバージョンで実装したため、maxValueとminValueを使っています。
最後に
言語によって配列の関数、メソッドが違うと思いました。