[レベル2]最大正方形を検索
12039 ワード
に答える
board_1 = [[0, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [0, 0, 1, 0]]
board_2 = [[0, 0, 1, 1], [1, 1, 1, 1]]
def solution(board):
for i in range(1, len(board)): # num of rows
for j in range(1, len(board[0])): # num of columns
if board[i][j] >= 1: # 0이 아닌 값들만 업데이트
# 위, 왼, 좌상단에 인접한 숫자의 최소값 + 1
board[i][j] = (
min(board[i - 1][j], board[i][j - 1], board[i - 1][j - 1]) + 1
)
# print(board)
return max([num for row in board for num in row]) ** 2
print(solution(board_1))
print(solution(board_2))
board
配列の(1,1)から、1より大きい値を探します.1より大きい値が見つかった場合、その位置に左、外、左上隅に隣接する数値の最小値が見つかり、その値に1が加算されます.
[0, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[0, 0, 1, 0]
累計[0, 1, 1, 1],
[1, 1, 2, 2],
[1, 2, 2, 3],
[0, 0, 1, 0]
接続された長方形でなければならないので、隣接する値の最小値を+1します.最後に、長方形の幅を返す必要があるため、累積した2 Dリストを1 Dに展開し、最大値を検索して平方値を返します.
2 Dリストを1 Dリストとして作成するには
my_list = [[1, 2], [3, 4], [5, 6]]
# 방법 1 - sum 함수
answer = sum(my_list, [])
# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))
# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))
# 방법 4 - list comprehension 이용
[element for array in my_list for element in array]
# 방법 5 - reduce 함수 이용 1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))
# 방법 6 - reduce 함수 이용 2
from functools import reduce
import operator
list(reduce(operator.add, my_list))
# 방법 7 - numpy 라이브러리의 flatten 이용
# 이 경우에는 원소의 길이가 동일해야 한다
import numpy as np
np.array(my_list).flatten().tolist()
参考資料
Reference
この問題について([レベル2]最大正方形を検索), 我々は、より多くの情報をここで見つけました https://velog.io/@t1won/Level-2-가장-큰-정사각형-찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol