[BOJ][๐ก4][๋ฐฑ์ค#14925] ๋ชฉ์ฅ ๊ฑด์คํ๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋๋ ์จ๋ ํด์ง๊ธ์ผ๋ก ๋ ์ ์ฌ์ ๋ชฉ์ฅ์ ์ง์ผ๋ ค ํ๋ค.ย ๊ทธ๊ฐ ์ฌ๋ ค๊ณ ์๊ฐ๋ฐ์ ๋ ์ ์ง์ฌ๊ฐํ์ด๊ณ ๋๋ถ๋ถ ๋คํ์ด์ง๋ง, ์ฌ๊ธฐ์ ๊ธฐ์ ๋ฒ ๊ธฐ ์ด๋ ค์ด ๋๋ฌด์ ์น์ธ ์ ์๋ ๋ฐ์๊ฐ ์๋ค. ๊ทธ๋ ๋ชฉ์ฅ์ ํ๋์ ์ ์ฌ๊ฐํ์ผ๋ก ์ต๋ํ ํฌ๊ฒ ์ง์ผ๋ ค ํ๋๋ฐ, ๊ทธ ์์ ๋๋ฌด๋ ๋ฐ์๋ ์์ด์ผ ํ๋ค.ย ๋ ์ ์ธ๋ก ๊ธธ์ด๊ฐ M๋ฏธํฐ, ๊ฐ๋ก ๊ธธ์ด๊ฐ N๋ฏธํฐ์ผ ๋, 1๋ฏธํฐ ๊ฐ๊ฒฉ์ ๊ฒฉ์๋ก ๋ ๋ ์ ์ง๋๋ฅผ M x Nํ๋ ฌ๋ก ํํํ์.ย ์ด๋, ํ๋ ฌ์ ์์ 0์ ๋คํ, 1์ ๋๋ฌด ๊ทธ๋ฆฌ๊ณ 2๋ ๋์ ์๋ฏธํ๋ค.ย ๋๋์จ์ ๋ ์์ ์ง์ ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ๋ชฉ์ฅ์ ํ ๋ณ์ ํฌ๊ธฐ L์ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
M N M x N ํ๋ ฌ
1 <= M <= 1000 1 <= N <= 1000
์ถ๋ ฅ
L
์์
์ ๋ ฅ
6 6
0 0 0 1 0 0
0 0 0 2 1 0
0 0 2 0 0 0
0 1 0 0 0 0
2 0 0 0 0 0
0 0 0 0 0 0
์ถ๋ ฅ
3
My Sol
I, J = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]
mat_h = [[0]*(J+1) for _ in range(I+1)]
mat_v = [[0]*(J+1) for _ in range(I+1)]
for i in range(1, I+1):
for j in range(1, J+1):
if mat[i-1][j-1]: continue
mat_h[i][j] = mat_h[i][j-1] + 1
for j in range(1, J+1):
for i in range(1, I+1):
if mat[i-1][j-1]: continue
mat_v[i][j] = mat_v[i-1][j] + 1
dp = [[0]*(J+1) for _ in range(I+1)]
for i in range(1, I+1):
for j in range(1, J+1):
if mat[i-1][j-1]: continue
dp[i][j] = min(mat_v[i][j], mat_h[i][j], dp[i-1][j-1]+1)
maxx = 0
for i in range(1, I+1):
for j in range(1, J+1):
if maxx < dp[i][j]:
maxx = dp[i][j]
print(maxx)
- ์ ๋ ฅ์ ์ฒ๋ฆฌํด์ค๋ค.
- mat 2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ๋ก ์ธ๋ก์ ์ฐ์๋ 0์ ๊ธธ์ด๋ฅผ ๊ฐ๊ฐ mat_h์ mat_v์ ํ์ํด์ค๋ค.
- dp ๋ฐฐ์ด์ ํ์ฌ ์์น์ ๊ฐ๋ก ์ธ๋ก ์ฐ์ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ์ ์ต๋๊ธธ์ด+1 ๊ฐ ์ค ์ต์๊ฐ์ ์ ์ฅํ๋ค. ์ด๋ ๊ณง ํ์ฌ ์์น๋ฅผ ์ค๋ฅธ์ชฝ ์๋ ์ ์ผ๋ก ํ๋ ์ ์ฌ๊ฐํ์ ์ต๋ ๋ณ ๊ธธ์ด์ด๋ค.
- ๋ชจ๋ dp ๋ฐฐ์ด์ ๋ํด ์ต๋๊ฐ์ ๊ตฌํด ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
dp = [[0]*(m+1) for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,m+1):
if board[i-1][j-1]:
dp[i][j] = 0
else:
dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
print(max(map(max, dp)))
ํ์ฌ ์์น์ 0์ด ์๋๋ผ๋ฉด dp์ 0์ ๋๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ์, ์ผ์ชฝ, ์ผ์ชฝ ์ 3๋ฐฉํฅ์ dp ๊ฐ ์ค ์ต์๊ฐ +1์ ํ์ฌ dp์ ์ ์ฅํ๋ค.
์ฐ์๋ 0์ ๊ณ์ฐํ๋ mat_v, mat_h์ ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋น ๋ฅธ ์ฐ์ฐ์๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ฏธ dp ๋ฐฐ์ด์ 0์ผ๋ก ์ด๊ธฐํ๋์์ผ๋ฏ๋ก board[i-1][j-1]
์ด 0์ด ์๋๋ผ๋ฉด dp์ 0์ ์ฌํ ๋นํ๋ ๊ฒ์ด ์๋๋ผ continue ํ๋ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ์ธก๋ฉด์ด๋ ์๊ฐ ์ธก๋ฉด์์๋ ๋ ์ ๋ฆฌํ ๋ฏ ์ถ๋ค.
2์ฐจ์ ๋ฐฐ์ด ๋ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๊ฒ์ print(max(map(max, dp)))
๋ก ๊ต์ฅํ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌํํ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ