[코딩테스트]프로그래머스 Lv2. 가장 큰 정사각형 찾기(DP)
2026.02.02. 14:46
문제 설명
1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
예를 들어
1234
0111
1111
1111
0010
가 있다면 가장 큰 정사각형은
1234
0
1111
1111
1110010
가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.
def solution(board):
answer = 0
# 2차원 배열
# 정사각형 -> index값 +
h,w = len(board), len(board[0])
best = 0
for i in range(h):
for j in range(w):
if board[i][j] == 1 :
if i == 0 or j == 0 :
best = max(best, 1)
else:
board[i][j] = min( # 하나라도 0이면 0
board[i-1][j-1] # 대각선 위
, board[i-1][j] # 상
, board[i][j-1] # 좌
)+1
best = max(best, board[i][j]) # 변의 길이
return best*best풀이
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0
이런 형태가 있다고 가정했을 때
2행까지 체크하면
0 1 1 1
1 1 2 2
1 2 2 3
0 0 1 0
이런 구조가 됨.
즉, 좌상, 상, 좌 값을 체크하면서 그 값들에 값을 더해서 만듬.