問題
今日はSplit the arrays and add the first part to the endの問題にチャレンジ。これは、指定されたkのインデックスの位置でリストを分割し、それらをスワップして、最初の部分をリストのお尻に持ってくるという問題。
Input: [12, 10, 5, 6, 52, 36] k = 2 Output: [5, 6, 52, 36, 12, 10]
kが2なので、リストを[12, 10]と[5, 6, 52, 36]に分割し、最初の部分を最後にくっつけることで、このような[5, 6, 52, 36,12, 10]というリストを作成するという問題。
実装
お題がリストを「スプリット」してうんたらとあるが、下記の画像のように、スプリットして結合することと、ローテションすることは最終的には同じことができるので、そのように問題を焼き直すとローテション問題と考えることができるので、これまでと同じようにローテションさせる。
from typing import List
def split_list(numbers: List[int], k: int) -> List[int]:
len_numbers = len(numbers)
for i in range(0, k):
tmp = numbers[0]
for j in range(0, len_numbers - 1):
numbers[j] = numbers[j + 1]
numbers[len_numbers - 1] = tmp
return numbers
if __name__ == '__main__':
numbers = [12, 10, 5, 6, 52, 36]
k = 2
print(split_list(numbers, k))
[5, 6, 52, 36, 12, 10]