Pythonでルールに一致するアイテムをカウントするプログラムの実装方法
問題の概要
配列 items が与えられ、各要素 items[i] は [type_i, color_i, name_i] という3つの値を持つとします。これらは i 番目のアイテムの「種類(type)」「色(color)」「名前(name)」を表しています。
さらに、2つの文字列 ruleKey と ruleValue からなるルールが与えられます。i 番目のアイテムがこのルールに一致するのは、以下のいずれかの条件が成り立つ場合です。
ruleKey = "type"かつruleValue = type_iruleKey = "color"かつruleValue = color_iruleKey = "name"かつruleValue = name_i
このとき、ルールに一致するアイテムの個数を求めるのが目的です。
入力例
| Bike | blue | ElecB |
| Car | silver | Sumo |
| Bike | blue | TVS |
ruleKey = "color"、ruleValue = "blue" の場合、出力は 2 になります。["Bike","blue","ElecB"] と ["Bike","blue","TVS"] の2件が条件に一致するためです。
解法のアプローチ
この問題は以下の手順で解くことができます。
- カウンター変数 count を 0 で初期化する
- ruleKey が "type" の場合、全アイテムに対して items[i][0] が ruleValue と一致したら count を1増やす
- ruleKey が "color" の場合、items[i][1] を比較する
- ruleKey が "name" の場合、items[i][2] を比較する
- 最後に count を返す
なお、ruleKey に応じて比較対象のインデックス(0, 1, 2)を辞書で対応付ければ、if文を繰り返さずに一度のループで処理でき、より簡潔なコードになります。
Pythonでの実装例
def solve(items, ruleKey, ruleValue):
# ruleKeyに対応する列のインデックスを決定
index_map = {"type": 0, "color": 1, "name": 2}
idx = index_map[ruleKey]
count = 0
for item in items:
if item[idx] == ruleValue:
count += 1
return count
items = [["Bike","blue","ElecB"],["Car","silver","Sumo"],["Bike","blue","TVS"]]
ruleKey = "color"
ruleValue = "blue"
print(solve(items, ruleKey, ruleValue))
入力
[["Bike","blue","ElecB"],["Car","silver","Sumo"],["Bike","blue","TVS"]], "color", "blue"
出力
2
計算量について
このアルゴリズムの時間計算量は O(n)(n はアイテムの総数)、空間計算量は O(1) です。アイテムのリストを一度だけ走査すればよいため、データ量が増えても効率的に動作します。
-
セットを使って文字列内の母音の数をカウントするPythonプログラム
本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe
-
Pythonで配列の反転数(転倒数)をカウントする方法
はじめに この記事では、配列内の反転(インバージョン)をカウントする問題とその解決策について詳しく解説します。 問題定義 問題: リストが与えられたとき、その中に含まれる反転の数をカウントして表示します。 反転数とは、配列を昇順にソートされた状態にするために必要な入れ替え(スワップ)の回数を表す指標です。具体的には、i < j かつ arr[i] > arr[j] を満たす要素のペア(i, j)の総数として定義されます。 実装例 # 反転数をカウントする関数 def InvCount(arr, n): inv_count = 0 for i in range(n