paizaの練習問題を解く 規則的な数列の和 Go編
こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 規則的な数列の和 | レベルアップ問題集 | プログラミング学習サイト【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) } これですっきり実装できました👍