こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
最長の区間 | レベルアップ問題集 | プログラミング学習サイト【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)
}
ですがいまいち理解できていません。クソー
まぁいいでしょう。。
AIと壁打ちしながらもうちょい理解を深めていきます。