์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ์ฐพ๊ธฐ
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9
programmers.co.kr
def solution(b):
len_x = len(b)
len_y = len(b[0])
for x in range(1, len_x):
for y in range(1, len_y):
if b[x][y] == 1:
b[x][y] = min(b[x][y-1], b[x-1][y], b[x-1][y-1])+1
return(max([i for x in b for i in x])**2)
โท ์ด ๋ฌธ์ ์ ๊ฐ์ฅ ํต์ฌ์ DP(Dyanamic Programming)์ ์ด์ฉํ์ฌ ํธ๋ ๊ฒ์ด๋ค. DP๋ฅผ ์ด์ฉํ์ง ์์ ๊ฒฝ์ฐ, ์๊ฐ์ด ์ด๊ณผ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์ ์ฌ๊ฐํ์ ๋ชจ๋ ์ง์ญ์ ํ์ํ๋, ํ์๋ ํด๋น ์ง์ญ์ ์ ๋ณด๋ฅผ ๋ค์ ํ์์ ํ์ฉํ๋ DP๋ฅผ ํตํด ์๊ฐ์ ์ค์ฌ์ผ ํ๋ค.
โท ํ์ ์ง์ b[x][y]๊ฐ 1์ธ ๊ฒฝ์ฐ, b[x][y-1], b[x-1,y], b[x-1][y-1]์ ์ต์๊ฐ์ 1์ ๋ํ์ฌ ๋ค์ ํ์ ์ง์ ์ ์ด ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ค. ์ด ๊ณผ์ ์ ๋ง์น ํ, ๊ฐ์ฅ ์ต๋๊ฐ ๋๋ b[x][y]๋ฅผ ์ฐพ๊ณ , ์ด ๊ฐ์ ์ ๊ณฑ์ ์ ๋ต์ผ๋ก ์ถ๋ ฅํ๋ค.