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

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[Level 2] ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜• ์ฐพ๊ธฐ

[[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]๋ฅผ ์ฐพ๊ณ , ์ด ๊ฐ’์˜ ์ œ๊ณฑ์„ ์ •๋‹ต์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.