Pythonで駐車システムを設計するプログラムの実装方法
駐車システムを設計することを考えてみましょう。この駐車場には「大型」「中型」「小型」の3種類の駐車スペースがあり、それぞれのサイズごとに決められた数のスロットが用意されています。ここでは、以下の2つのメソッドを持つ OurParkingSystem というクラスを作成します。
- constructor(big, medium, small) − 各サイズの利用可能なスロット数を受け取り、
OurParkingSystemクラスのオブジェクトを初期化するコンストラクタです。 - addCar(carType) − 駐車しようとしている車について、指定された
carTypeに対応する駐車スペースが空いているかどうかを判定するメソッドです。
3つのスロット big(大型)、medium(中型)、small(小型)は、それぞれ 1、2、3 で表されます。制約として、車は carType が一致するスペースにしか駐車できません。空きがない場合は false を返し、空きがあればそのサイズのスペースに駐車して true を返します。
動作例
たとえば、大型車用のスペースが2つ、中型車用が0、小型車用が1つある場合、コンストラクタの呼び出しは OurParkingSystem(2, 0, 1) のようになります。この状態で addCar を次の順に呼び出してみます。
- addCar(3) − 小型車を1台追加し、true を返す
- addCar(2) − 中型車用のスペースがないため false を返す
- addCar(3) − 小型車用の空きがもうないため false を返す
- addCar(1) − 大型車を1台追加し、true を返す
- addCar(1) − もう1台の大型車を追加し、true を返す
- addCar(1) − 大型車用の空きがなくなったため false を返す
解決の手順
この問題は、次の手順で解決できます。
constructor()を定義します。引数として big、medium、small を受け取ります。- sp := [0, big, medium, small] のようなリストを初期化します(インデックスを carType に対応させるため、先頭に 0 を入れています)。
addCar()を定義します。引数として carType を受け取ります。- もし sp[carType] > 0 ならば:
- sp[carType] := sp[carType] - 1
- true を返す
- それ以外は false を返します。
Pythonでの実装例
以下の実装を見ると、より理解が深まるでしょう。
class OurParkingSystem:
def __init__(self, big, medium, small):
self.sp = [0, big, medium, small]
def addCar(self, carType):
if(self.sp[carType] > 0):
self.sp[carType] -= 1
return True
return False
ps = OurParkingSystem(2, 0, 1)
print(ps.addCar(3))
print(ps.addCar(2))
print(ps.addCar(3))
print(ps.addCar(1))
print(ps.addCar(1))
print(ps.addCar(1))
入力
ps.addCar(3)
ps.addCar(2)
ps.addCar(3)
ps.addCar(1)
ps.addCar(1)
ps.addCar(1)
出力
True
False
False
True
True
False
まとめ
この実装では、各サイズの残りスロット数をリストで管理し、addCar が呼ばれるたびに該当タイプの空きを確認して減算するだけというシンプルな構造になっています。計算量は呼び出しごとに O(1) であり、非常に効率的です。駐車場管理のような現実的なシナリオをクラス設計で表現する良い練習例といえるでしょう。
-
Pythonで単利(シンプルインタレスト)を計算する方法をわかりやすく解説
本記事では、Python 3.xを使って単利(シンプルインタレスト)を計算する方法について詳しく解説します。金融計算の基礎となる単利の概念から、実際のコード実装まで、初心者の方にもわかりやすいように順を追って説明していきます。 単利とは? 単利とは、元本に対してのみ利息が発生する計算方式です。複利と異なり、発生した利息が次期の元本に加算されないため、計算式がシンプルなのが特徴です。 単利は「1日あたりの利率 × 元本 × 支払いまでの経過日数」を掛け合わせることで求められます。 単利の計算式 数学的には、以下の公式で表されます。 単利(SI)=(P × T × R)÷ 100 各変数の意味は次
-
Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説
本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体