์๋ ํ์ธ์ ์ ์ธ์ ๋๋ค!
PS..๋ฅผ ๋ค๊ณ ์์ต๋๋ค....ํผ์ ํด๊ฒฐ๋ชปํ ๋ฌธ์ ๊ฐ ๋ ์๊ธด ๊ฒ์ด์ฃ ..์..
PS ์ค๋ ฅ์ด ์ ์ด๋ ๊ฒ ์๋๊น์....์ข ๋ ๋ง์ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ๊ฒ ์ด์..
๋ฌธ์ ๋งํฌ
๋ฌธ์ ํ์ด
์ผ๋จ ์ด ๋ฌธ์ ๋ DP(Dynamic Programming) ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ํ์ด์ผํ๋ ๋ฌธ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋๋จธ์ค์ ์ฐ์ต๋ฌธ์ ๋ผ ๋ฐฑ์ค์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค!
์ด ๋ฌธ์ ๋ ๊ฐ๋จํ์ง๋ง DP ๋ฌธ์ ์ ๋ํ์ ์ธ ์ ํ(?) ๊ฐ์์ ๋์ค์ ๋น์ทํ ์ ํ์ ๋ฌธ์ ๊ฐ ๋์์ ๋ ์์ฉํ ์ ์๋๋ก ๊ธฐ๋กํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค! (DP๋ฌธ์ ๋ ์ด ๋ฌธ์ ๋ฅผ DP๋ก ํ์ด์ผ๊ฒ ๋ค๋ ๊ฐ์ด ์ ์์ค๋ ๋ฌธ์ ๊ฐ ๋ง๋๋ผ๊ตฌ์..)
์ ๋ ์ฒ์์ ์ ๊ทผ์ dfs๋ก ํ๋๋ฐ์,, dfs ํจ์๋ฅผ ๋ง๋ค์ด์ ๋ฐฉ๋ฌธํ์ง ์์ ์ขํ์ด๊ณ 1์ด๋ผ๋ฉด ํด๋น ์ขํ์ ์ค๋ฅธ์ชฝ, ์๋์ชฝ์ ํ์ธํด์ ๊ฐ์ ๋ํด์ฃผ๋ ๋ฐฉ์(์ฌ๊ท๋ก ๋ฐ๋ณต)์ผ๋ก ์ฐ๊ฒฐ๋ ์ฌ๊ฐํ์ ์ต๋๊ฐ์ ๊ตฌํ ๋ค์, ์ฌ๊ฐํ ์์ญ ์ด์ธ์ ์ขํ์ ๊ฐ์ด ํฌํจ๋์ด์์ ์ ์์ผ๋ ์์ ๊ณผ์ ์์ ๋์ถํ ์ต๋๊ฐ๋ณด๋ค ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ๊ณฑ๊ทผ์ ๊ตฌํด์ ๋ค์ ์ ๊ณฑํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ์์ต๋๋ค,,
๊ทผ๋ฐ ์ฝ๋๋ฅผ ์ง๊ณ ๋ณด๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ขํ๋ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฌ๊ฐํ์ด ๋์ฌ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ์ฒดํฌ๊ฐ ์ด๋ ต๊ณ , ์ด๋ค ์ขํ๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๋์ง์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฌ๋ผ์ง ์ ์๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์๊ณ ... ๋ค๋ฅธ ํ์ด ๋ฐฉ๋ฒ์ด ๋ ์ค๋ฅด์ง ์์ ๊ทธ๋ฅ ํ์ด ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ ๊ฒ ๊ฐ์์..ใ
์ด ๋ฌธ์ ๋ฅผ DP๋ฅผ ์ด์ฉํด ํด๊ฒฐํ๋ ๋ฒ์ ์ฝ๊ฒ ์ดํด๊ฐ ๊ฐ๋๋ก ๊ทธ๋ฆผ์ผ๋ก ๋ด ์๋ค!
๋ฌธ์ ์ ์ ์๋ ์ ์ถ๋ ฅ ์์ 1๋ฒ์ ์ ๋ ฅ๊ฐ์ ๊ฐ์ง๊ณ ํ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค~!
์ด๋ฐ ์ฌ๊ฐํ์ด ์ฃผ์ด์ง๋ค๋ฉด, ์ด ์ฌ๊ฐํ ๋ด์์ ์ ๋ถ 1๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ํฌ๊ธฐ๊ฐ 2*2์ธ ์ ์ฌ๊ฐํ(1๊ฐ ์ด์์ ์นธ์ ๊ฐ์ง๊ณ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์ ์ฌ๊ฐํ ํฌ๊ธฐ)์ ํ๋์ฉ ํ์ธํด๊ฐ๋ฉฐ ์ต๋ ๋์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ ๋๋ค.
arr[1][1] ๋ถํฐ ์ขํ์ ๊ฐ์ ํ์ธํ๋ฉฐ ํด๋น ์ขํ์ ๊ฐ์ด 1์ด๋ผ๋ฉด ํ์ฌ ์ ์ฌ๊ฐํ ๋ฒ์(arr[i-1][j], arr[i][j-1], arr[i-1][j-1]) ์์ ์๋ ๊ฐ์ฅ ์์ ์๋ฅผ arr[i][j] ์ ๋ํด์ ํ์ฌ๊น์ง ํ์ธํ ์ ์ฌ๊ฐํ๋ค์ ํ ๋ณ์ ๊ธธ์ด์ ์ต๋๊ฐ์ ๊ฐฑ์ ํด๊ฐ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ์ฐ์ฐ์ ๋ฐ๋ณตํ์ง ์๊ณ ํจ์จ์ ์ผ๋ก ๋ต์ ๋์ถํด๋ผ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ต์ ๋์ถํด๋๊ฐ๋ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์ฝ๊ฒ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค!
(1,1) ๋ถํฐ ์์ํด์ 2*2 ์ ์ฌ๊ฐํ์ ํ์ธํฉ๋๋ค. ์์ ์ฌ๊ฐํ์ ๊ฒฝ์ฐ ์ต์๊ฐ์ด 0์ด๊ธฐ ๋๋ฌธ์ (1,1)์ ๊ฐ์ ๊ทธ๋๋ก 1์ด ๋ฉ๋๋ค.
์ต์๊ฐ์ ๋ํ๋ ์ด์ ๋ ์์ ๊ฒฝ์ฐ์ ๊ฐ์ด ์ต์๊ฐ์ด 0์ธ ๊ฒฝ์ฐ ํด๋น ๋ฒ์์ ์ฌ๊ฐํ์ด ๋ชจ๋ 1๋ก ์ด๋ฃจ์ด์ ธ์์ง ์๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๊ฐํ์ ๋ณ์ ๊ธธ์ด๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ฃผ์ง ์๊ธฐ ์ํด์ ์ ๋๋ค!
arr์ ์ธ๋ฑ์ค๋ฅผ ์ํํ๋ฉด์ ์ฒซ๋ฒ์งธ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์์ ๊ฐ์ ๊ณผ์ ์ผ๋ก ๊ฐ์ด ์ ์ฅ๋๊ฒ ๋ฉ๋๋ค.
์์ ๊ทธ๋ฆผ๊น์ง ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด (2,3)์ ์ ์ฅ๋๋ ๊ฐ์ 3์ด ๋๋ฏ๋ก, ์ฃผ์ด์ง ์ฌ๊ฐํ์์ ๊ตฌํ ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํ ๋ณ์ ๊ธธ์ด๊ฐ ์ ์ฅ๋ฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ๋ ์ด ๊ฐ์ ์ ๊ณฑ์ ํด์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๊ฒ ์ฃ !!
์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์ ๋๊น์ง ์ํํ๊ฒ ๋๋ฏ๋ก ์์ ๊ณผ์ ์ด ์ถ๊ฐ๊ฐ ๋๊ฒ ์ง๋ง, ์ํ๊ฐ ๋๋ ํ ์ขํ์ ์ ์ฅ๋๋ ์ต๋๊ฐ์ ๊ทธ๋๋ก 3์ด๋ฏ๋ก ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ธ ์ต๋๊ฐ์ ๊ตฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ Swift ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Swift ํ์ด ์ฝ๋
import Foundation
func solution(_ board:[[Int]]) -> Int {
var arr = board
var max = 0
// ํ์ด๋ ์ด ๊ธธ์ด 1์ธ ๊ฒฝ์ฐ ๋ฐ๋ก ์ฒ๋ฆฌ
if board.count == 1 || board[0].count == 1 {
max = board.flatMap{$0}.contains(1) ? 1 : 0
}
for i in 1..<board.count {
for j in 1..<board[0].count {
if arr[i][j] == 1 {
let min = [arr[i-1][j-1], arr[i-1][j], arr[i][j-1]].min()! // 2*2 ์ ์ฌ๊ฐํ ์ค ์ต์๊ฐ
arr[i][j] += min // ํด๋น ์ขํ์ ์ต์๊ฐ ๋ํจ
max = arr[i][j] > max ? arr[i][j] : max // max๊ฐ ๊ฐฑ์
}
}
}
return max * max
}
[์ฐธ๊ณ ์๋ฃ]
'๐ฅ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์คํฐ์ปค ๋ชจ์ผ๊ธฐ(2) (3) | 2023.05.01 |
---|---|
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ ๊ตญ์ฌ์ฌ (2) | 2023.04.05 |
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (2) | 2023.03.31 |
[Algorithm/Swift] ํ๋ก๊ทธ๋๋จธ์ค(Lv.3) - ๊ธฐ์ง๊ตญ ์ค์น (2) | 2023.03.30 |
[Algorithm/Swift] ์ด์ง ํ์(Binary Search) (0) | 2023.02.06 |