λ¬Έμ μ€λͺ
1μ 0λ‘ μ±μμ§ ν(board)κ° μμ΅λλ€. ν 1μΉΈμ 1 x 1 μ μ μ¬κ°νμΌλ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€. νμμ 1λ‘ μ΄λ£¨μ΄μ§ κ°μ₯ ν° μ μ¬κ°νμ μ°Ύμ λμ΄λ₯Ό return νλ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ. (λ¨, μ μ¬κ°νμ΄λ μΆμ ννν μ μ¬κ°νμ λ§ν©λλ€.)
μλ₯Ό λ€μ΄
0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 |
κ° μλ€λ©΄ κ°μ₯ ν° μ μ¬κ°νμ
0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 |
κ° λλ©° λμ΄λ 9κ° λλ―λ‘ 9λ₯Ό λ°νν΄ μ£Όλ©΄ λ©λλ€.
μ ν 쑰건
- ν(board)λ 2μ°¨μ λ°°μ΄λ‘ μ£Όμ΄μ§λλ€.
- ν(board)μ ν(row)μ ν¬κΈ° : 1,000 μ΄νμ μμ°μ
- ν(board)μ μ΄(column)μ ν¬κΈ° : 1,000 μ΄νμ μμ°μ
- ν(board)μ κ°μ 1λλ 0μΌλ‘λ§ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
μ μΆλ ₯ μ
board | answer |
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] | 9 |
[[0,0,1,1],[1,1,1,1]] | 4 |
λ΄ λ¬Έμ νμ΄
func solution(_ board:[[Int]]) -> Int {
var block = board
var result = 0
// λ§μ½ μ£Όμ΄μ§ νμ΄λ μ΄μ΄ 1μΌ κ²½μ°μ μ΄μ°¨νΌ μ μ¬κ°ν λμ΄κ° 1λ³΄λ€ ν΄ μ μμ
if board.count == 1 || board[0].count == 1 {
result = 1
}
// 1ν 1μ΄λΆν° λκΉμ§ λ°λ³΅λ¬Έ
for i in 1..<board.count {
for j in 1..<board[0].count {
if board[i][j] == 1 {
block[i][j] = min(block[i-1][j-1], block[i-1][j], block[i][j-1]) + 1
result = result < block[i][j] ? block[i][j] : result
}
}
}
// resultμ μ κ³± μΆλ ₯
return result * result
}
- μ²μμ μ΄λ»κ² νμ΄μΌν μ§ μ ν κ°λ μ΄ μλΌμ,,γ
γ
λ€λ₯Έ λΈλ‘κ·Έλ₯Ό μ°Έκ³ νμ¬ νμλ€.
μ΄ νμ΄μ μ§ν λ°©μμ κ·Έλ¦ΌμΌλ‘ κ·Έλ €λ³΄μ. (μ μΆλ ₯ μμ 1)
[1][1]λΆν° μμκ° 1μΌ λ, κ·Έ μ μμλ€(μ΄ κ²½μ°μλ [0][0], [0][1], [1][0]) μ€ κ°μ₯ μμ μλ₯Ό λν΄μ€λ€.
μμ κ²½μ°μλ κ·Έ μ μμλ€μ΄ 0, 1, 1 μ΄κΈ° λλ¬Έμ κ·Έ μ€ κ°μ₯ μμ 0μ λν΄μ£Όμλ€.
μ΄λ° λ°©μμΌλ‘ λͺ¨λ μμλ€μ νλ νλ κ³μ°ν΄ λκ°λ©΄,
μμ κ°μ΄ μ μ¬κ°νμ΄ λ μ μλ κ²½μ°μ μ μ€, κ°μ₯ κΈ΄ ν λ³μ κΈΈμ΄λ₯Ό ꡬν μ μλ€. - μμ λ‘μ§μΌλ‘ ꡬν μλ€ μ€ κ°μ₯ ν° μλ₯Ό result λ°°μ΄μ λ΄μ λ§μ§λ§μ μ κ³±νμ¬ λ¦¬ν΄ν΄μ£Όμλ€.
π‘ νΌλλ°±
- μ²μμ κ°μ₯ ν° μ μ¬κ°νμ ꡬνλ λ°©λ²μ μκ°ν΄λ΄μ§ λͺ»νλλ°,,
λ¬Έμ λ₯Ό λ§μ΄ νμ΄λ³΄λ©΄μ μ΄λ° μ λ° νμ΄λ°©λ²λ€μ μ΅νκ³ ,,
μ€μ€λ‘ λ€μν νμ΄ λ°©λ²μ λ§λ€ μ μλλ‘ λ§μ΄ 곡λΆν΄μΌν κ² κ°λ€.
π [ μΆκ° ] 1μ£ΌμΌ ν λ€μ νμ΄λ³΄κΈ°
func solution(_ board:[[Int]]) -> Int
{
var result = board
var answer = 0
if board.count == 1 || board[0].count == 1 {
if board.flatMap{$0}.max()! == 1 { return 1 }
else { return 0 }
}
for i in 0..<board.count-1 {
for j in 0..<board[0].count-1 {
if result[i][j] >= 1 && result[i+1][j+1] == 1 {
result[i+1][j+1] += min(result[i][j], result[i+1][j], result[i][j+1])
if result[i+1][j+1] > answer { answer = result[i+1][j+1] }
}
}
}
return answer * answer
}
- μ λ²μ 곡λΆν λλΆμ λ°λ‘ λ‘μ§μ μκ°ν΄μ ν μ μμλ€.
- κ·Όλ° λ€μ 보λ, 첫 λ²μ§Έ νμ΄μμ μ²λ¦¬ν΄μ£Όμ§ μμ μμΈ νλκ° λ³΄μ¬μ μ²λ¦¬ν΄μ£Όμλ€.
- 첫 λ²μ§Έ ifλ¬Έμμ, λ°°μ΄μ μμ μ€ 1μ΄ νλλ μμ μλ μκΈ° λλ¬Έμ,, λ°°μ΄μ κ°μ₯ ν° μκ° 1μ΄ μλ κ²½μ° 0μ 리ν΄νλλ‘ νλ€.
μΌλ§ μ 곡λΆν flatMapμ μ¬μ©νμ¬ 2μ°¨μ λ°°μ΄μ 1μ°¨μμΌλ‘ λ§λ€μ΄μ£Όμ΄ μ½κ² κ°μ₯ ν° μλ₯Ό ꡬν μ μμλ€. - λλ¨Έμ§ λ‘μ§μ 첫 λ²μ§Έ νμ΄μ μ μ¬νλ€.
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] κ°μ μΈκΈ° BOJ #10807 (0) | 2021.07.28 |
---|---|
[Swift Algorithm] μνλ²³ κ°μ BOJ #10808 (0) | 2021.07.27 |
[Swift Algorithm] μ¬λ°λ₯Έ κ΄νΈ Programmers(Lv.2) (4) | 2021.07.08 |
[Swift Algorithm] λ€μ ν° μ«μ Programmers(Lv.2) (0) | 2021.07.08 |
[Swift Algorithm] μ΅λκ°κ³Ό μ΅μκ° Programmers(Lv.2) (0) | 2021.07.08 |
λκΈ