[python]プログラマー(Lv 2)-最大の正方形を検索
こんにちは:
https://programmers.co.kr/learn/courses/30/lessons/12905
0と1からなる配列の中で最大の正方形の問題を探します.下図に示します.
せいげんじょうけん表(ボード)は2次元配列です. 表(板)の行(行)サイズ:1000以下自然数 表(板)の列(列)サイズ:1000以下自然数 テーブル(プレート)の値は1または0のみです.
制限では,rとcの長さは1000を超えてはならず,,,およびゲートは最大2回Oを必要とする(n^2).
どうやって2回もforドアを回って答えを見つけることができるのか悩んでいました.結局答えが見つからなかったので検索しました
解決策は,(i,j)位置の値を(i,j)位置で作成できる最大の正方形エッジ長にすることである.
値を左(i,j−1)、上(i−1,j)、および対角線位置(i−1,j−1)から最小値+1に更新します.
[プログラマー]-最大正方形を検索
https://programmers.co.kr/learn/courses/30/lessons/12905
0と1からなる配列の中で最大の正方形の問題を探します.下図に示します.
せいげんじょうけん
どうやって2回もforドアを回って答えを見つけることができるのか悩んでいました.結局答えが見つからなかったので検索しました
解決策は,(i,j)位置の値を(i,j)位置で作成できる最大の正方形エッジ長にすることである.
値を左(i,j−1)、上(i−1,j)、および対角線位置(i−1,j−1)から最小値+1に更新します.
def solution(board):
answer = 0
r = len(board)
c = len(board[0])
square = [[0] * (c+1) for _ in range(r+1)]
for i in range(r):
for j in range(c):
square[i+1][j+1] = board[i][j]
for i in range(1, r+1):
for j in range(1, c+1):
if square[i][j] != 0:
square[i][j] = min(square[i-1][j], square[i][j-1], square[i-1][j-1]) + 1
answer = max(answer, square[i][j])
return answer * answer
ハングルを参照:[プログラマー]-最大正方形を検索
Reference
この問題について([python]プログラマー(Lv 2)-最大の正方形を検索), 我々は、より多くの情報をここで見つけました https://velog.io/@kerri/Python-프로그래머스Lv2-가장-큰-정사각형-찾기-yslc8ko4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol