๐ ๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/12905?language=swift
๐ ํ์ด๋ฐฉ๋ฒ
ํ์ด๋ฐฉ๋ฒ์ ์๊ฐํด๋ด๋๋ฐ,,, ์ ์๊ฐ์ด ๋์ง ์์์ ์ธํฐ๋ท์ ์ฐพ์๋ดค๋ค ใ ใ ์ด๋ฐ ๋ฐ๋ณด.. ๊ทธ๋ฆฌ๊ณ ์๊ฐ๋ณด๋ค ๋๋ฌด ๊ฐ๋จํ ๊ท์น์ด์๊ณ ๋๋์ฒด ์ด๋ฐ๊ฑด ์ด์ผ ์๊ฐํด๋ด๋๊ฑฐ์ง,, ์ถ์๋ค. ์ด์ ๋ฐฉ๋ฒ์ ์์์ผ๋ ๋์ค์ ์ ์จ๋จน์ ์ ์๊ฒ ๊ตฐ...
์ด๋ ๊ฒ ํ๋ณ์ฉ ๋ํด๊ฐ๋ฉด์ ๋ชจ๋ ๊ฐ๋ค์ ๊ฐฑ์ ์ํจ๋ค. (์ฐ๋์์ด ๊ฐฑ์ ๋๊ฐ)
์ฐ๋์์ผ๋ก ์ฐ์ธ๊ณณ์ ๊ฐ๋ค์ ๊ฐฑ์ ํ๋ฉด์ ๋์ด๋ฅผ ์ฐพ๋๋ค. (i, j)๋ผ๊ณ ํ๋ฉด, (i-1, j), (i, j-1), (i-1, j-1) ๋ถ๋ถ์ ๊ฐ๋ค์ ๋ณด๊ณ , ์ต์ ๊ฐ์ +1 ์ํจ ๊ฐ์ (i, j)์์น์ ๊ฐฑ์ ์์ผ์ค๋ค. ์ด๋ ๊ฒ ํ๋ค๊ฐ, ์ฐ๋์ ๊ธ์จ๋ก ์ฐ์ฌ์ง ๊ฒ๋ค์ค ๊ฐ์ฅ ํฐ ์๊ฐ ๋ง๋ค์ ์๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํ๋ณ์ ๊ธธ์ด๊ฐ ๋๋ค. ๊ทธ๋ผ ์ ๋ต์? ์ ๊ณฑํด์ฃผ๋ฉด ๋๊ฒ ์ง!
๊ทธ๋ฆฌ๊ณ ์ค์ํ์ ์ด ํ๋ ๋ ์์๋ค. ๋ง์ฝ (i, j)์ ์๋ฆฌ์ ๊ฐ์ด 0์ด๋ผ๋ฉด, ๊ทธ ๋ถ๋ถ์ ์ ๋ ์ ์ฌ๊ฐํ์ด ๋ง๋ค์ด์ง ์ ์๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ผ ๊ณผ๊ฐํ ๋๊ฒจ์ฃผ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผํ๋ค. ํด๋น ๊ฐ์ ๊ฐฑ์ ์ํค๊ณ ์งํํด๋ฒ๋ฆฌ๋ฉด, ๊ฐ์ด๋ฐ ๋ปฅ๋ซ๋ฆฐ ์ ์ฌ๊ฐํ์ด ๋์ค๊ฒ ๋๊ฒ ์ง!!
์ฆ, ์ฐ๋์ ๊ธ์จ์ฑ๋ก ์๋ ๋ถ๋ถ์ธ (i, j)์ ๋ถ๋ถ์๋ ํ์ฌ ๋ณ์ ๊ธธ์ด๋ฅผ ๊ฐฑ์ ์์ผ์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ปฅ๋ซ๋ฆด ์ ์๋ 0์ ๊ฐฑ์ ์์ผ์ฃผ๋ฉด ์๋๋ค!
๐ 1๋ฒ ์ผ์ด์ค ์คํจ
์์์ ์์ฑํ ํ์ด ๊ทธ๋๋ก ์์ฑํ๋ค. ๊ทผ๋ฐ,, ํ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์์ ์คํจ๊ฐ ๋ด๋ค ใ ใ ํจ์จ์ฑ, ๋ค๋ฅธ ํ ์ผ๋ค์ ์ ๋ถ ํต๊ณผ๋ค. ๊ทธ๋ ๋ค๋ฉด, ์์ธ์ผ์ด์ค ํ๋๋ฅผ ์ฒ๋ฆฌํด์ฃผ์ง ๋ชปํ๋ค๋ ๋ป์ธ๋ฐ.... ๋ญ๊น?
์ญ์,, ์ด๋ ๊ฒ ์์ธ์ฌํญ์ ์ฐพ๊ธฐ๊ฐ ๊ฐ์ฅ ํ๋ค๋ค ใ ใ ์ฌ๋ฌ๊ฐ์ง ์ํฉ์ ์ดํด๋ณด๊ณ ์ฐธ๊ณ ํ ์ฝ๋๋ ์ดํด๋ณด๊ณ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ฉด์ ์ด์ฌํ ์๊ฐํด๋ณธ ๊ฒฐ๊ณผ, ํ์ฌ ๋ด๊ฐ ์ง ์ฝ๋๋ ์๋์ ๊ฐ์ ์ํฉ์์๋ ์ ๋ต์ ๋ง์ถ ์ ์๋ค๊ณ ํ๋จ๋๋ค.
์ด๋ ๊ฒ ํ์ฌ ๋ด์ฝ๋๋ ํ๋์ ๋ถ๋ถ๋ง ๊ฐฑ์ ํ๋ฉด์ ์ ๋ต์ ์ฐพ๋๋ก ๋์ด์๋ค. ์ด๊ฒ ์์ธ์ด์๊ตฐ!! ๊ณ ์ณ๋ณด์.
๐ ์ ๋ต์ฝ๋
์ค์ ๋ง์๋ค! ์์ฒ๋ผ ๋นจ๊ฐ์ ๋ถ๋ถ์ ์ถ๊ฐํ๋ ์ฝ๋๋ก ์์ฑํ๋๊น ๋ง์๋ค! ์ด๋ ๊ฒ ์์ธ์ผ์ด์ค? ํน์ ์ด๋ค๊ฑธ ํ๋ ธ๋์ง ์ฐพ์์๋ ์ ๋ง ํฌ์ด์ด ๋์น๋ค ํํ
import Foundation
func solution(_ board:[[Int]]) -> Int {
var answer: Int = 0
var newBoard = Array(repeating: Array(repeating: 0, count: board[0].count+1), count: board.count+1)
for i in 0..<board.count {
for j in 0..<board[i].count {
newBoard[i+1][j+1] = board[i][j]
}
}
for i in 1..<newBoard.count {
for j in 1..<newBoard[i].count {
if newBoard[i][j] != 0 {
newBoard[i][j] = min(newBoard[i][j-1], newBoard[i-1][j], newBoard[i-1][j-1]) + 1
answer = max(newBoard[i][j], answer)
}
}
}
return answer * answer
}