0
Help us understand the problem. What are the problem?

posted at

Codility lesson2 CyclicRotation

Codilityの問題を解くことにハマってきた。
今までは2重ループで全部強引突破してきたが、いかに無駄をなくせるかという視点でコードを書かなければならないので、
そういった処理速度を意識したコードを書くことができるようになる。皆さんもぜひやってみてください。

というわけでlesson2のCyclicRotationをやっていきます。

lesson2のCyclicRotationはリストの要素のシフトに関する問題。リストの要素を全て右にK個分シフトして、できたリストを返すという問題です。

[アルゴリズム]
1.全ての要素をずらす。
2.ずらして、リストからはみ出した分は余りとして捉え、余った分だけリストの先頭から入れていく。

具体的にコードを見ていこう。

def solution(A,K):
    len_A = len(A)
    rotated_list = [0]*(len_A)  #回答用のリスト

    for i in range(len_A):
        rotated_list[(i+K)%len_A] = A[i]    #回答用のリストをはみ出した分は余りとする.

    return rotated_list

さて結果は。。。。?

スクリーンショット 2022-06-12 0.50.10.png

100%です。よかった〜。
今回の問題のポイントははみ出した文を余りとして考えるというところだと思います。

つまりインデックス番号iをKだけ移動させてi+Kがリストの長さlen_Aを超えてしまったら、超えた分(つまりi+Kをlen_Aで割った余り)だけ先頭から入れていけばいい。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?