概要
paizaをGolangでPaizaに挑戦するときの個人的Tipsです。
気づきがあればどんどん追記していきます。
(最終更新 2020/1/29)
内容は主に問題へのアプローチの仕方と、よく使うコードのメモ書き。
個人的なメモなので必ずしもベストプラクティスではないです。
したがってより良い方法をアドバイスいただけると助かります。
問題へのアプローチ
標準入力
以下の記事を参考に標準入力を受け取るテンプレートを作成する。
https://qiita.com/zurazurataicho/items/c8856fc97924decf23b41
回答の作成のフロー
1.標準入出力のコピペ
2.標準入力の値の分解して変数に落とし込む
3.ロジックを考える
4.処理を書く
デバック
各ロジックのセクションごとにデバックをすること。
これを怠ると途中で流れを追えなくなったとき大幅なタイムロスになる。
したがってセクションが組み上がったら例え簡単な処理でも出力結果が自分の意図通りになっていることを確認すること。
関数の作成条件
セクションにおける処理が2つ以上の場合は関数に切り分けた方が見やすいかも。
逆に長くても処理が1つなら関数として書き出すのは時間がもったいない気もする。
あるいは巨大なコメントアウトでも設けるか。
あくまで問題の回答の速さと正答率、処理速度を競うので過度な可読性と保守性は切り捨てよう(戒め。
よく使うヤツ
空のスライスの作成
array := []int{}
データを放りこみたいが、いくつ入るかわからない時。
長さのあるスライスの作成
length := 5
var array = make([]int, length)
問題では処理や登場人物などの長さが与えられるケースが多いのでよく使う。
空のスライスに値を追加する
appendValue := 0
array := []int{}
array = append(array, appendValue)
回答(標準出力)するデータを作る時。
配列の最初/最後を除いたスライスの作成
length := 5
var array []int
//=> [1,2,3,4,5]
dataRemoveFirst := array[1:]
//=> [2,3,4,5]
dataRemoveLast := array[:length-1]
//=> [1,2,3,4]
問題に使用されている標準入力データのいらない部分を削ぎ落とす時。
特に1行目(array[0])は必要ないケースが多いので「array[:length-1]」はよく使う。
また、最後を削る時は「:スライスの長さ」ではなく「:スライスの長さ-1」にすること。
数値変換
number, _ := strconv.Atoi
配列のソート
sort.Strings(words)
sort.Ints(numbers)
詳しくはsortパッケージを参照。
いろいろsortの設定ができるがそのケースに直面した時に更新しようと思う。
配列の長さ
length := len(array)