こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
規則的な数列の和 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】
実装
最初は以下のように実装しました。
package main
import "fmt"
func main(){
var n, k int
fmt.Scan(&n, &k)
m := []int{1, 0, -1}
c := n - 1
sum := 0
for c < k {
sum += m[c % 3]
c++
}
fmt.Println(sum)
}
しかし、うまくいきませんでした。。
実行時間エラーになってしまったため、高速化が必要です。
解法としては、法則性を考えれば以下のようにN(1)で実装できます。
package main
import "fmt"
func main(){
var n, k int
fmt.Scan(&n, &k)
result := 0
switch n % 3 {
case 1: if k % 3 >= 1 {
result = 1
}
case 2: if k % 3 == 0 {
result = -1
}
case 0: if k % 3 == 0 {
result = -1
}
}
fmt.Println(result)
}
これですっきり実装できました👍