2021. 5. 22. 17:14ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift - Algorithm - Solutions
๐ต๐ป ๋ฌธ์ ํด์
1๊ณผ 0์ผ๋ก ์ฑ์์ง ํ๊ฐ ์ฃผ์ด์ง๋ฉด ๊ทธ ํ์์ 1๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ๋์ด๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ ๋๋ค. ๋จ, ์ ์ฌ๊ฐํ์ ์ถ๊ณผ ํํํด์ผ ํฉ๋๋ค.
์์๋ก ์ฃผ์ด์ง 4 X 4์ ํ์์๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ๋์ด๊ฐ 9๊ฐ ๋๊ฒ ์ต๋๋ค.
์ ํ์ฌํญ
- ํ(board)๋ 2์ฐจ์ ๋ฐฐ์ด๋ก ์ฃผ์ด์ง๋๋ค.
- ํ(board)์ ํ(row)์ ํฌ๊ธฐ : 1,000 ์ดํ์ ์์ฐ์
- ํ(board)์ ์ด(column)์ ํฌ๊ธฐ : 1,000 ์ดํ์ ์์ฐ์
- ํ(board)์ ๊ฐ์ 1 ๋๋ 0์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๋จผ์ ๊ฐ์ฅ ์์ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋ถํฐ ํฌ๊ธฐ๋ฅผ ํ์ฅํ๋ฉฐ ๋ฌธ์ ์ ์ ๊ทผํด๋ณด๊ฒ ์ต๋๋ค. ๊ฐ์ฅ ์์ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ 1 X 1 ํฌ๊ธฐ์ 1๋ก ์ด๋ฃจ์ด์ง ์ ์ฌ๊ฐํ์ด๊ฒ ์ฃ ? ๊ทธ๋ค์ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ 2 X 2์ 1๋ก ์ด๋ฃจ์ด์ง ์ ์ฌ๊ฐํ์ ๋๋ค.
์ด๋ ๊ฒ 4 X 4 ํฌ๊ธฐ์ ํ๊ฐ ์ฃผ์ด์ก๋ค๊ณ ์๊ฐํด๋ด ์๋ค. ํ๋์์ผ๋ก ํ์๋ (1 , 1) ์์น๋ฅผ ์ ์ฌ๊ฐํ์ ์ฐํ๋จ ๊ผญ์ง์ ์ด๋ผ๊ณ ์๊ฐํ๊ณ , 1๋ก ์ด๋ฃจ์ด์ง 2 X 2 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์๋์ง ํ๋จํ๊ธฐ ์ํด์๋ ๋นจ๊ฐ์์ผ๋ก ์น ํด์ง (0, 0), (0, 1), (1, 0) ์์น์ ์ซ์๊ฐ ๋ชจ๋ 1 ์ธ์ง๋ฅผ ํ๋จํด์ผ ํฉ๋๋ค. ๋ง์ฝ ๋นจ๊ฐ์ ์์น์ ์ซ์๊ฐ ๋ชจ๋ 1์ด๋ผ๋ฉด 2 X 2 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ด ๋ ๊ฒ์ด๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ํ๋์ ์์น์ 1๋ก๋ง ์ด๋ฃจ์ด์ง 1 X 1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ด ๋ ๊ฒ์ ๋๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ํ์ฅํด ๋๊ฐ๊ธฐ์ํด ํด๋น ์ขํ๋ฅผ 1๋ก ์ด๋ฃจ์ด์ง ์ ์ฌ๊ฐํ์ ์ฐํ๋จ์ด๋ผ๊ณ ์๊ฐํ๊ณ ๊ทธ ์ขํ์ ๊ฐ์ ์ ์ฌ๊ฐํ์ ์ต๋ ๋ณ์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๋ Square ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ด ์๋ค.
Board๋ฐฐ์ด์ ๋ณต์ฌํ Square ๋ฐฐ์ด์ ๋๋ค. Square ๋ฐฐ์ด์๋ ํด๋น ์ขํ๋ฅผ ์ ์ฌ๊ฐํ์ ์ฐํ๋จ์ด๋ผ๊ณ ํ์์ ๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ๋ณ์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์กฐ๊ธ ๋ ํ์ฅํด์ (R, C)์์ 1๋ก ์ด๋ฃจ์ด์ง 3 X 3 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ด ๋๋ ค๋ฉด ์ด๋ป๊ฒ ๋์ด์ผ ํ ๊น์?
( R - 1 , C ), ( R - 1, C - 1 ), ( R , C - 1 ) ์ด ์ธ ์ขํ๋ฅผ ์ ์ฌ๊ฐํ์ ์ฐํ๋จ์ผ๋ก ํ๋ 2 X 2 ์ ์ฌ๊ฐํ์ด 3๊ฐ๊ฐ ์กด์ฌํ๋ฉด ๋ฉ๋๋ค.
๋นจ๊ฐ์, ํ๋์, ์ด๋ก์ ํ ๋๋ฆฌ์ 2 X 2 ์ ์ฌ๊ฐํ์ด ์กด์ฌํ๋ฉด Board๋ฐฐ์ด์์ ํ๋์์ผ๋ก ์น ํด์ง ์ขํ๋ Square ๋ฐฐ์ด์์ 3์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ( R - 1 , C ), ( R - 1, C - 1 ), ( R , C - 1 ) ์ด ์ธ ์ขํ๋ฅผ ์ฐํ๋จ์ผ๋ก ํ๋ ์ ์ฌ๊ฐํ๋ค์ ๋ณ์ ์ต์ ํฌ๊ธฐ๊ฐ 1์ด๊ธฐ ๋๋ฌธ์ ์ง๊ธ ํ๋์์ผ๋ก ์น ํด์ง ์ขํ์ Square๋ฐฐ์ด์ ๊ฐ์ 2๊ฐ ๋ฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก ํ์ฅํ๋ฉด ์ต์ข ์ ์ธ Square ๋ฐฐ์ด์ ๊ฐ์ด ์๋์ ๊ฐ์ด ๊ฐฑ์ ๋๊ฒ ๋ฉ๋๋ค.
์ค๋ช ํ ๋๋ก Square ๋ฐฐ์ด์ ์ ์ฌ๊ฐํ์ ์ต๋ ๋ณ์ ํฌ๊ธฐ๋ฅผ ๊ฐฑ์ ํ์ฌ ์ ์ฅํ๊ธฐ ์ํด Board๋ฐฐ์ด์ ํ์ํ๋ฉฐ Square ๋ฐฐ์ด์ ๊ฐฑ์ ํด๋ณด๊ฒ ์ต๋๋ค. Board ๋ฐฐ์ด์ ์์ฐจ์ ์ผ๋ก ํ์ํ๋ฉด์ ํด๋น ์ขํ์ ์ซ์๊ฐ 1์ด๋ผ๋ฉด ํด๋น ์์น์ Square ๋ฐฐ์ด์์ ๋นจ๊ฐ์ ์์น์ ํด๋นํ๋ Square๋ฐฐ์ด์ ๊ฐ ์ค ์ต์๊ฐ์ ๋ํ์ฌ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
for row in 1..<board.count {
for col in 1..<board[row].count {
if board[row][col] == 1 {
square[row][col] += min(square[row-1][col], square[row-1][col-1], square[row][col-1])
maxVal = max(maxVal, square[row][col])
}
}
}
์ด๋ฐ ๋ฐฉ์์ผ๋ก Board ํ๋ฅผ ํ์ํ๋ฉฐ Square ๋ฐฐ์ด์ ๊ฐฑ์ ํ๊ณ Square ๋ฐฐ์ด์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ฐพ์ผ๋ ค๋ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ๋ณ์ ๊ธธ์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฃผ์ด์ง Board์ ํ์ ํฌ๊ธฐ๊ฐ 1์ด๊ฑฐ๋ ์ด์ ํฌ๊ธฐ๊ฐ 1์ธ ๊ฒฝ์ฐ ์์ธ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ๋ต์ ๊ตฌํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๐คท๐ปโ๏ธ ๋ ์๊ฐํด๋ณด๊ธฐ
์ง๊ธ ํ์ ํฌ๊ธฐ๊ฐ 1์ด๊ฑฐ๋ ์ด์ ํฌ๊ธฐ๊ฐ 1์ผ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํฌ๊ธฐ๋ฅผ 1๋ก ๋ฆฌํดํ์ฌ๋ ์ ๋ต ์ฒ๋ฆฌ๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ๋ ๊ฒฝ์ฐ์์ ๋ชจ๋ ์ซ์๊ฐ 0์ด๋ผ๋ฉด ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ํฌ๊ธฐ๋ฅผ 0์ผ๋ก ๋ฆฌํดํด์ผ ๋ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ๋ก๊ทธ๋๋จธ์ค์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํด์ผ ํ ๋ฏ์ถ์ต๋๋ค.
๐ฆ ๋ฌธ์ ํ์ด & ์ฝ๋
import Foundation
func solution(_ board:[[Int]]) -> Int
{
var maxVal = 0
var square = board
// ํ์ ํฌ๊ธฐ๊ฐ 1์ด๊ฑฐ๋ ์ด์ ํฌ๊ธฐ๊ฐ 1์ธ๊ฒฝ์ฐ
if board.count == 1 || board.filter({$0.count > 1}).count == 0 {
// 1์ ํ๋๋ผ๋ ํฌํจ ํ๋ฉด return 1
for row in 0..<board.count {
for col in 0..<board[i].count {
if board[row][col] == 1 {
return 1
}
}
}
// ๊ทธ๋ ์ง ์๋ค๋ฉด 0
return 0
}
for row in 1..<board.count {
for col in 1..<board[row].count {
// ํด๋น ์ขํ๊ฐ 1์ด๋ผ๋ฉด
if board[row][col] == 1 {
// ์ธ ์ขํ๋ฅผ ์ฐํ๋จ์ผ๋ก ํ๋ ์ ์ฌ๊ฐํ ๋ณ์๊ธธ์ด์ ์ต์๊ฐ์ ๋ํด์ค๋ค.
square[row][col] += min(square[row-1][col], square[row-1][col-1], square[row][col-1])
// ์ต๋๊ฐ ๊ฐฑ์
maxVal = max(maxVal, square[row][col])
}
}
}
// ์ ๊ณฑํ์ฌ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ค.
return maxVal * maxVal
}
'๐ง๐ปโ๐ป iOS ๊ฐ๋ฐ > Swift - Algorithm - Solutions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] n์ง์ ๊ฒ์ (0) | 2021.05.27 |
---|---|
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ (0) | 2021.05.25 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ ๊ตฌํ๊ธฐ (0) | 2021.05.20 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ฐฐ๋ฌ (0) | 2021.05.19 |
[Swift - ํ๋ก๊ทธ๋๋จธ์ค] ๋ด์ค ํด๋ฌ์คํฐ๋ง (0) | 2021.05.19 |