S E P H ' S

[Python] 가장 큰 정사각형 찾기 본문

Algorithm/Programmers

[Python] 가장 큰 정사각형 찾기

yoseph0310 2021. 8. 24. 16:59
 

코딩테스트 연습 - 가장 큰 정사각형 찾기

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

programmers.co.kr

풀이

1. 동적계획법(DP)로 풀이

2. 반복문을 통한 완전탐색으로 풀이하기엔 시간복잡도에서 막힌다. (행 : 1,000 열: 1,000)

3. 정사각형이 가능한 최소 변의 길이 2만큼부터 파악.

4. dp 배열에 board의 첫번째 행렬을 넣고 대각선 인덱스에서부터 파악해 나간다.

5. 세 값을 비교해 최솟값에 +1을 해나가고

6. 가장 큰 값의 제곱을 리턴

 

def solution(board):
    n = len(board)
    m = len(board[0])
    
    dp = [[0] * m for _ in range(n)]
    dp[0] = board[0]
    for i in range(1, n):
        dp[i][0] = board[i][0]
    
    for i in range(1, n):
        for j in range(1, m):
            if board[i][j] == 1:
                dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
    
    answer = 0
    for i in range(n):
        temp = max(dp[i])
        answer = max(answer, temp)
    
    return answer**2

 

- DP 배열 사용하지 않고 푼 코드

 

def solution(board):
    n = len(board)
    m = len(board[0])
    
    for i in range(1, n):
        for j in range(1, m):
            if board[i][j] == 1:
                board[i][j] = min(board[i-1][j-1], board[i-1][j], board[i][j-1]) + 1
    
    answer = 0
    for i in range(n):
        temp = max(board[i])
        answer = max(answer, temp)
    
    return answer**2

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 124 나라의 숫자  (0) 2021.08.25
[Python] 소수 찾기  (0) 2021.08.25
[Python] n진수 게임  (0) 2021.08.23
[Python] 올바른 괄호  (0) 2021.08.23
[Python] 다음 큰 숫자  (0) 2021.08.22