Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで行列上のZ字形を形成する要素の合計を求める方法

n × n の行列 M が与えられたとき、その中で「Z」の字形を形成するすべての要素の合計を求めます。ここでいうZ字は、最初の行全体最後の行全体、そして右上から左下へ向かう副対角線によって構成されます。

たとえば、入力として次のような行列が与えられたとします。

432
918
256

この場合の出力は 23 になります。Z字を構成する要素は [4+3+2+1+2+5+6] となり、その合計が 23 だからです。

解き方のアプローチ

この問題は、以下の手順で解くことができます。

  • 変数 n に行列の行数を代入します。
  • n が 2 以下の場合、Z字の形が成立しないため、行列内の全要素の合計をそのまま返します。
  • first_row に最初の行の要素の合計を代入します。
  • last_row に最後の行の要素の合計を代入します。
  • diagonal に、i を 1 から n-2 の範囲で動かしたときの matrix[i][n-1-i](副対角線の中央部分)の合計を代入します。
  • first_row + last_row + diagonal を結果として返します。

なお、副対角線の両端(matrix[0][n-1] と matrix[n-1][0])はそれぞれ最初の行・最後の行に含まれるため、二重にカウントしないよう範囲を 1 から n-2 に限定しています。このアルゴリズムの計算量は O(n) であり、行列のサイズに対して非常に効率的に処理できます。

実装例

class Solution:
    def solve(self, matrix):
        n = len(matrix)
        if n <= 2:
            return sum(sum(row) for row in matrix)
        first_row = sum(matrix[0])
        last_row = sum(matrix[n-1])
        diagonal = sum(matrix[i][n-1-i] for i in range(1, n-1))
        return first_row + last_row + diagonal

ob = Solution()
matrix = [
    [4, 3, 2],
    [9, 1, 8],
    [2, 5, 6]
]
print(ob.solve(matrix))

入力

matrix = [[4, 3, 2],
[9, 1, 8],
[2, 5, 6]]

出力

23
  1. リスト内の要素の合計を求めるPythonプログラム

    この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に