0
0

More than 1 year has passed since last update.

Codility lesson2 CyclicRotation

Posted at

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で割った余り)だけ先頭から入れていけばいい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0