μ•Œκ³ λ¦¬μ¦˜/DP

[Python] λ°±μ€€ 1915 κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•

JayAlex07 2023. 3. 30. 10:42

πŸ§‘‍πŸ’» [Python] λ°±μ€€ 1915 κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•

Gold 4 - DP

img

μΈλ±μŠ€κ°€ λ²—μ–΄λ‚˜μ§€ μ•ŠλŠ” μ„ μ—μ„œ, μœ„, μ™Όμͺ½, μ™Έμͺ½ μœ„μ˜ μˆ«μžλ“€ 쀑 min 값을 κ΅¬ν•œ λ‹€μŒμ— 1을 더해쀀닀


 

μ½”λ“œ

N, M = map(int, input().split())
matrix = [list(map(int, input())) for _ in range(N)]
dp_table = [[0] * M for _ in range(N)]

for i in range(N):
    for j in range(M):

        if matrix[i][j] == 1:
            dp_table[i][j] = 1

            if 0 <= i - 1 and 0 <= j - 1:
                dp_table[i][j] = min(dp_table[i - 1][j], dp_table[i - 1][j - 1], dp_table[i][j - 1]) + 1

result = 0        
for d in dp_table:
    result = max(result, max(d))

print(result ** 2)

μ‹œκ°„ μ΄ˆκ³Όκ°€ λ‚¬λ˜ μ½”λ“œ

  • 완전탐색을 기반으둜 풀이λ₯Ό ν–ˆλ‹€. 그리고 사싀상 for문을 4λ²ˆμ„ ν•΄μ•Ό ν•œλ‹€...
N, M = map(int, input().split())

def square(i, j, length):

    for r in range(i, length + i):
        for c in range(j, length + j):
            if matrix[r][c] == 0:
                return False

    return True

matrix = [list(map(int, input())) for _ in range(N)]


l = N
flag = False


while flag == False:

    for i in range(N):
        if flag == True:
            break

        for j in range(M):

            if i + l <= N and j + l <= M:
                flag = square(i, j, l)

                if flag == True:
                    break

            else:
                break

    l -= 1


print((l + 1) ** 2)