paizaの練習問題を解く 区間の積 Go編
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 最長の区間 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 実装 以下のように実装しました。 package main import "fmt" func main(){ var n, k int fmt.Scan(&n, &k) a := make([]int, n) for i := 0; i < n; i++ { fmt.Scan(&a[i]) } x := 1 c := 1 for i := 0; i < n; i++ { x *= a[i] if x == 0 { c = 1 x = 1 } else if x >= k { fmt.Println(c) return } c++ } } ですがこれだと攻略はできませんでした。。 回答を見ながら修正しました。 package main import "fmt" func main(){ var n, k int fmt.Scan(&n, &k) a := make([]int, n) for i := 0; i < n; i++ { fmt.Scan(&a[i]) } start := 0 end := 0 count := 1000000 mul := func(data []int) int { result := 1 for _, v := range data { result *= v } return result } for end < n && start <= end { if mul(a[start: end + 1]) >= k { if end - start + 1 < count { count = end - start + 1 } start += 1 } else if a[end] == 0 { start = end + 1 end += 1 } else { end += 1 } } fmt.Println(count) } ですがいまいち理解できていません。クソー ...