Goを覚えるついでに競技プログラミングにもチャレンジしちゃおう企画2回目。
はじめてのあっとこーだーの後は何をやればいいのか迷っているとこんな記事が。
qiita.com
とりあえずこれに従ってみようと思い、今4問目に来た。初のB問題!
beta.atcoder.jp
まあB問題とはいえ、まだまだ処理効率なんぞ考えなくても問題ないレベルみたいだ。
とりあえずfor文の書き方やスライスの使い方の勉強にはなった。
あとGoはmap()を使った関数型チック?な書き方はできないっぽいということもわかった。
for文の中で同時に色々な処理をしたくないから、処理をいくつかの関数に分けちゃったけど、
競技プログラミングってメモリ効率やら実行速度が命!ってイメージだから、どうなんだろうな〜。可読性と両立させるのは大変そうだ。
あとそもそも問題を解くときにテスト駆動で進めたりするんだろうかとか、そこら辺の常識?定石?も知りたいなー。
package main
import (
"fmt"
)
func main() {
var n int
fmt.Scan(&n)
numbers := make([]int, n)
for i := range numbers {
fmt.Scan(&numbers[i])
}
var result int
for isAllEven(numbers) {
result++
numbers = divideAllNumbersBy(numbers, 2)
}
fmt.Println(result)
}
func divideAllNumbersBy(dividend []int, divisor int) []int {
var result []int
for _, number := range dividend {
result = append(result, number/divisor)
}
return result
}
func isAllEven(numbers []int) bool {
for _, value := range numbers {
if !isEven(value) {
return false
}
}
return true
}
func isEven(num int) bool {
return num%2 == 0
}