๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š 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