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

Pythonで爆弾が爆発したときに安全な場所の数を見つけるプログラムはありますか?


2次元のバイナリ行列があるとします。ここで、1は爆弾を表し、0は空のセルを表します。爆弾が爆発すると、同じ行と列に沿ったすべてのスペースが損傷します。ダメージを受けないように立つことができるスペースの数を見つける必要があります。

したがって、入力が次のような場合

1 1 0
0 0 0
0 0 0

右下のセルと右中央のセルに2つのスペースがあるため、出力は2になります。

これを解決するには、次の手順に従います。

  • r:=行列の行数と同じサイズのリストで、falseで埋める

  • c:=行列の列数と同じサイズのリストで、falseで埋める

  • 範囲0から行列の行数-1までのiの場合、実行

    • 0から行列の列数までの範囲のjの場合-1、do

      • matrix [i、j]が1と同じ場合、

        • r [i]:=True、c [j]:=True

  • ct:=0

  • 範囲0から行列の行数-1までのiの場合、実行

    • 0から行列の列数までの範囲のjの場合-1、do

      • r [i]がFalseで、c [j]がFalseの場合、

        • ct:=ct + 1

  • ctを返す

理解を深めるために、次の実装を見てみましょう。

class Solution:
   def solve(self, matrix):
      r = [False for i in range(len(matrix))]
      c = [False for i in range(len(matrix[0]))]

      for i in range(len(matrix)):
         for j in range(len(matrix[0])):
            if matrix[i][j] == 1:
               r[i] = True
               c[j] = True

   ct = 0
   for i in range(len(matrix)):
      for j in range(len(matrix[0])):
         if r[i] == False and c[j] == False:
            ct += 1
   return ct

ob = Solution()
matrix = [
   [1, 1, 0],
   [0, 0, 0],
   [0, 0, 0]
]
print(ob.solve(matrix))

入力

[
[1, 1, 0],
[0, 0, 0],
[0, 0, 0] ]

出力

2

  1. 行列の転置を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 行列が与えられた場合、転置を同じ行列に格納して表示する必要があります。 行列の転置は、行を列に、列を行に変更することで得られます。つまり、A行列の転置はA[i][j]をA[j][i]に変更することで得られます。 以下に示す実装を見てみましょう- 例 N = 4 def transpose(A):    for i in range(N):       for j in range(i+1, N):     &nbs

  2. リスト内で最大数を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: