こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

規則的な数列の和 | レベルアップ問題集 | プログラミング学習サイト【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)
}

これですっきり実装できました👍