Pythonで最も裕福な顧客の総資産額を求めるプログラム
本記事では、m × n の行列 accounts が与えられたとき、accounts[i][j] が「i 番目の顧客が j 番目の銀行に保有している金額」を表すものとして、最も裕福な顧客の総資産額を求める方法を解説します。
ここで「最も裕福な顧客」とは、すべての銀行における保有金額の合計が最大となる顧客のことです。
問題の例
例えば、入力が以下のような行列だったとします。
| 10 | 20 | 15 |
| 30 | 5 | 20 |
| 10 | 5 | 12 |
| 15 | 12 | 3 |
この場合、出力は 55 になります。2番目の顧客(2行目)の資産は 30 + 5 + 20 = 55 となり、全顧客の中で最大だからです。
解法のアプローチ
この問題は、次の手順で解くことができます。
最大値を保持する変数
max_valueを 0 で初期化します。各行(各顧客)ごとに、その行の全要素の合計値を計算します。
計算した合計値が現在の
max_valueより大きければ、max_valueを更新します。すべての行を処理し終えたら、
max_valueを返します。これが最も裕福な顧客の総資産額です。
このアルゴリズムの計算量は、行列の全要素を一度ずつ走査するため O(m × n) であり、非常に効率的です。
Pythonでの実装例
理解を深めるために、以下の実装例を見てみましょう。
def solve(accounts):
max_value = 0
ind_value = 0
for i in range(len(accounts)):
ind_value = sum(accounts[i])
if ind_value > max_value:
max_value = ind_value
return max_value
accounts = [[10,20,15],
[30,5,20],
[10,5,12],
[15,12,3]]
print(solve(accounts))入力
[[10,20,15], [30,5,20], [10,5,12], [15,12,3]]
出力
55
補足:より簡潔な書き方
Pythonでは、内包表記と組み込み関数 max() を使うことで、上記のロジックを1行で表現することもできます。
def solve(accounts):
return max(sum(row) for row in accounts)どちらの実装でも結果は同じですが、コードの可読性やチームのコーディング規約に応じて使い分けるとよいでしょう。
-
Pythonでポリゴンの面積を求める方法:靴ひも公式を使った実装
はじめに2次元平面上に、単純な多角形(ポリゴン)の頂点を時計回りまたは反時計回りの順に並べた座標リストが与えられたとします。このとき、その多角形の面積を計算するのが本記事の目的です。例えば、入力が points = [(0, 0), (0, 5), (3, 5), (3, 0)] のような場合、これは幅3・高さ5の長方形を表しているため、出力は 15.0 となります。解法の考え方:靴ひも公式(Shoelace Formula)この問題は、有名な靴ひも公式(測量士の公式)を使うことで効率的に解けます。隣り合う2頂点ごとに外積 x1*y2 - y1*x2 を計算し、それらをすべて足し合わせて絶対値
-
Pythonで多角形の外周(周囲長)を求めるプログラム
問題の概要2次元平面上にある単純な多角形(自己交差しないポリゴン)の頂点が、順序付きの点のリストとして与えられているとします。このとき、その多角形の外周(周囲長)を求めることが目的です。例として、入力が points = [(0, 0), (0,5), (3, 5), (3,0)] の場合を考えてみましょう。このときの出力は 16 になります。これは、図からも分かるように、長さ3の辺が2本、長さ5の辺が2本存在するためです。したがって、2×5 + 2×3 = 16 となります。アルゴリズムの考え方この問題は、「隣接する2つの頂点間の距離をすべて計算して合計する」というシンプルなアプローチで解く