ITP2_2の解答例(Python)
更新日: 2024年12月13日 (金)
ITP2_1に続いて配列に関する問題です.
今回も配列に関する計算量に関して頭に入れた上でコードを書かないと時間制限に引っかかります.
こちらのサイトに計算量がまとめてあります.
1. ITP2_2_A: Stack
両端への操作しかしないのでdequeを使いました.
from collections import deque で deque を使うことができます.
【外部サイト】Pythonのdequeでキュー、スタック、デック(両端キュー)を扱う
2. ITP2_2_B: Queue
複数のdequeに対して操作を行うだけでAとほとんど変わりません.
3. ITP2_2_C: Priority Queue
優先度付きキューに関する問題です.
Pythonではheapqで優先度付きキューを使用することができます.
【外部サイト】優先度付きキューの使い方
4. ITP2_2_D: Splice
リストの結合に関してです.
l1.extend(l2) で l1の後ろにl2を追加できます.
insert は末尾に関してしか行わないのですが,結合に時間がかかります.
例えば長さ3のリストAと長さ1000のリストBの結合でも A.extend(B) と B.extend(A)ではだいぶ時間が変わります.
list.extendにかかる時間
リストの結合は長さを比較して短い方を長い方に追加するようにしました.