AtCoderBeginnerContest231 B問題200点 「Election」
https://gyazo.com/83df7a2ec990e4b4f64f261c77fc730d
問題概要
制約
気持ち
解法
実際にもっとも投票が多い名前をカウントしてあげればいいです。
手法としては、以下の2つが考えられます。
$ 1 \leq i \leq Nを for loop して、$ S_i の名前が何個あるか数える
map[string]int のように、文字列をキーとするマップを用意してカウントする
どちらかすきな方法で実装してあげると良いです。
計算量
$ O(N^2)
$ O(N \log |S|)
新たな学び
go の map は mp := make(map[string]int) のように初期化して使う
func (my T) f(arg R) S {} のように 型T を関数名の前につけることで、型 T がもつメソッドになる
*T のようにすることで、変数 my を直接参照して変形できる
極力 Immutable にしたいので、あまりつけないほうがいいかも
反省点
コード
code: go
type A struct {
name string
cnt int
}
func (i A) max(j A) A {
if i.cnt > j.cnt {
return i
} else {
return j
}
}
func main() {
io := NewIo()
defer io.Flush()
// ------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------
N := io.NextInt()
S := make([]string, N)
for i := 0; i < N; i++ {
}
ans := A{name: "", cnt: 0}
for _, v := range S {
cnt := 0
for _, vv := range S {
if v == vv {
cnt++
}
}
ans = ans.max(A{name: v, cnt: cnt})
}
fmt.Println(ans.name)
}