๋ฌธ์
๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง - 14925๋ฒ
ํ์ด ๊ณผ์
๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ์ฐพ๋ ๋์ ๊ณํ๋ฒ
๋ฌธ์ ์
๋๋ค.
๊ทธ๋ฅ ์์ ํ์
์ผ๋ก ์ฐพ์ผ๋ ค ํ ๊ฒฝ์ฐ O(N^4)
์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.dp[x,y] = (x, y)์ง์ ์ ์ผ์ชฝ ๋ชจ์๋ฆฌ๋ก ํ๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํ ๋ณ์ ๊ธธ์ด
๋ผ๊ณ ์ ์ํ๋ค๋ฉด
๋ค์๊ณผ ๊ฐ์ ์ ํ์์ ์ป์ ์ ์์ต๋๋ค.
dp[x][y] = min(dp[x + 1][y], dp[x][y + 1], dp[x + 1][y + 1]) + 1
์ด๋ ๊ฒฉ์๋ฅผ ๋ฒ์ด๋๋ ์์น๋ ์ฅ์ ๋ฌผ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ ์ฌ๋ก๋ก ์ฒ๋ฆฌํด์ค๋๋ค.
์ฝ๋
import sys
sys.setrecursionlimit(10**6)
M, N = list(map(int, sys.stdin.readline().split()))
board = [list(map(int, sys.stdin.readline().split())) for _ in range(M)]
memo = [[-1] * N for _ in range(M)]
def dp(x, y):
if x < 0 or x >= M or y < 0 or y >= N:
return 0
if board[x][y] != 0:
return 0
if memo[x][y] != -1:
return memo[x][y]
memo[x][y] = min(dp(x + 1, y), dp(x, y + 1), dp(x + 1, y + 1)) + 1
return memo[x][y]
def solution():
answer = 0
for x in range(M):
for y in range(N):
L = dp(x, y)
answer = max(answer, L)
return answer
print(solution())
๋ฐ์ํ
'๐ algorithm > boj' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ 20363 - ๋น๊ทผ ํค์ฐ๊ธฐ (0) | 2021.03.14 |
---|---|
BOJ 14588 - Line Friends (Small) (0) | 2021.03.14 |
BOJ 13164 - ํ๋ณต ์ ์น์ (0) | 2021.03.14 |
BOJ 3109 - ๋นต์ง (0) | 2021.03.14 |
BOJ 14620 - ๊ฝ๊ธธ (0) | 2021.03.14 |
๐ฌ ๋๊ธ