λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“š Algorithm/Baekjoon

[Baekjoon] λ°±μ€€ 1915 'κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•' λ¬Έμ œν’€μ΄ 파이썬, Python, μ•Œκ³ λ¦¬μ¦˜ 풀이

πŸ“ 1915 문제

n×m의 0, 1둜 된 배열이 μžˆλ‹€. 이 λ°°μ—΄μ—μ„œ 1둜 된 κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•μ˜ 크기λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

0 1 0 0
0 1 1 1
1 1 1 0
0 0 1 0

μœ„μ™€ 같은 μ˜ˆμ œμ—μ„œλŠ” κ°€μš΄λ°μ˜ 2×2 배열이 κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•μ΄λ‹€.

 

 

μž…λ ₯

첫째 쀄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진닀. λ‹€μŒ n개의 μ€„μ—λŠ” m개의 숫자둜 배열이 주어진닀.

 

 

좜λ ₯

첫째 쀄에 κ°€μž₯ 큰 μ •μ‚¬κ°ν˜•μ˜ 넓이λ₯Ό 좜λ ₯ν•œλ‹€.

 

 

🧐 풀이

λ™μ ν”„λ‘œκ·Έλž˜λ°μ„ μ΄μš©ν•˜μ—¬ ν’€μ—ˆλ‹€. 

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
arr = []
dp = [[0] * m for _ in range(n)]

for _ in range(n):
    arr.append(list(map(int, list(input().rstrip()))))

answer = 0

for i in range(n):
    for j in range(m):
        if i == 0 or j == 0:
            dp[i][j] = arr[i][j]
        elif arr[i][j] == 0:
            dp[i][j] = 0
        else:
            dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
        answer = max(dp[i][j], answer)

print(answer * answer)
728x90