1. ๋ฌธ์ ์ค๋ช
์ง๋ฏผ์ด๋ ๋ค์ํ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๋ชจ์ ๋์๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ๊ณต์์ ์ํ์ ๋์์ต๋๋ค. ๊ณต์์๋ ์ด๋ฏธ ๋์๋ฆฌ๋ฅผ ๊น๊ณ ์ฌ๊ฐ๋ฅผ ์ฆ๊ธฐ๋ ์ฌ๋๋ค์ด ๋ง์ ์ง๋ฏผ์ด๊ฐ ๊น ์ ์๋ ๊ฐ์ฅ ํฐ ๋์๋ฆฌ๊ฐ ์ด๋ค ๊ฑด์ง ํ์ธํ๋ ค ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ง๋ฏผ์ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋์๋ฆฌ์ ํ ๋ณ ๊ธธ์ด๊ฐ 5, 3, 2 ์ธ ์ข ๋ฅ์ด๊ณ , ์ฌ๋๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์์ ์๋ค๋ฉด ์ง๋ฏผ์ด๊ฐ ๊น ์ ์๋ ๊ฐ์ฅ ํฐ ๋์๋ฆฌ๋ 3x3 ํฌ๊ธฐ์ ๋๋ค.
์ง๋ฏผ์ด๊ฐ ๊ฐ์ง ๋์๋ฆฌ๋ค์ ํ ๋ณ์ ๊ธธ์ด๋ค์ด ๋ด๊ธด ์ ์ ๋ฆฌ์คํธ mats, ํ์ฌ ๊ณต์์ ์๋ฆฌ ๋ฐฐ์น๋๋ฅผ ์๋ฏธํ๋ 2์ฐจ์ ๋ฌธ์์ด ๋ฆฌ์คํธ park๊ฐ ์ฃผ์ด์ง ๋ ์ง๋ฏผ์ด๊ฐ ๊น ์ ์๋ ๊ฐ์ฅ ํฐ ๋์๋ฆฌ์ ํ ๋ณ ๊ธธ์ด๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ์๋ฌด๋ฐ ๋์๋ฆฌ๋ ๊น ์ ์๋ ๊ฒฝ์ฐ -1์ returnํฉ๋๋ค.
์ ํ์ฌํญ
- 1 ≤ mats์ ๊ธธ์ด ≤ 10
- 1 ≤ mats์ ์์ ≤ 20
- mats๋ ์ค๋ณต๋ ์์๋ฅผ ๊ฐ์ง์ง ์์ต๋๋ค.
- 1 ≤ park์ ๊ธธ์ด ≤ 50
- 1 ≤ park[i]์ ๊ธธ์ด ≤ 50
- park[i][j]์ ์์๋ ๋ฌธ์์ด์ ๋๋ค.
- park[i][j]์ ๋์๋ฆฌ๋ฅผ ๊น ์ฌ๋์ด ์๋ค๋ฉด "-1", ์ฌ๋์ด ์๋ค๋ฉด ์ํ๋ฒณ ํ ๊ธ์๋ก ๋ ๊ฐ์ ๊ฐ์ต๋๋ค.
2. ์ถ๋ ฅ ์์

3. ๋ฌธ์ ๋ต์
def solution(mats, park):
answer = 0
m = len(park[0])
n = len(park)
size = [[0] * m for _ in range(n)] # 2์ฐจ์ ๋ฆฌ์คํธ ์ด๊ธฐํ
max_size = 0
for i in range(0, n): # 0~5
for j in range(0, m): # 0~7
if park[i][j] == "-1": # ๋น ์๋ฆฌ
if i == 0 or j == 0: # ์ฒซ ํ ๋๋ ์ฒซ ์ด์ธ ๊ฒฝ์ฐ
size[i][j] = 1 # ๋ง๋ค ์ ์๋ ์ ์ฌ๊ฐํ ํฌ๊ธฐ
else: # ์ต์๊ฐ์ ์ฐพ์ ๋ง๋ค ์ ์๋ ์ ์ฌ๊ฐํ ํฌ๊ธฐ ๊ณ์ฐ
size[i][j] = min(size[i-1][j], size[i][j-1], size[i-1][j-1]) + 1
max_size = max(map(max, size)) # ์ต๋๊ฐ ์ฐพ๊ธฐ
mats.sort(reverse=True) # ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
for m in mats: # 5, 3, 2
if m <= max_size:
answer = m
return answer
return -1