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
さて結果は。。。。?
100%です。よかった〜。
今回の問題のポイントははみ出した文を余りとして考えるというところだと思います。
つまりインデックス番号iをKだけ移動させてi+Kがリストの長さlen_Aを超えてしまったら、超えた分(つまりi+Kをlen_Aで割った余り)だけ先頭から入れていけばいい。