Foma's νμ΄
λ¬Έμ νμ΄
μ΄ λ¬Έμ λ λμ κ³νλ²(Dynamic Programming)μΌλ‘ νμ΄μΌ νλ λ¬Έμ μ λλ€.
λμ κ³νλ²μ λν΄μλ dojinkimm.github.io/algorithm/2019/10/17/dp-1.html μ΄κ³³μ μ°Έκ³ ν΄μ£ΌμΈμ!
κ°λ¨νκ² μ€λͺ λ리면 boardμμ μ«μλ₯Ό μ°¨λ‘λ‘ λλ©΄μ nκ³Ό κ°μ μ΄μμ μμͺ½ νμ μ,μμ λ³΄λ€ νλ μμ μ΄μμ μμͺ½μ μ, μμ κ³Ό κ°μ νμμ νλ μμ μ μ¦,μμ μ λλ¬μΌ μ μ€ κ°μ₯ μμ μλ₯Ό nμκ² λν΄μ£Όλ©΄ λ©λλ€.
κ·Έ λ€μ λ°λ nλ€μ€ κ°μ₯ ν° μ«μμ μ κ³±μ ν΄μ£Όμλ©΄ λ©λλ€. μ΄μ κ°μ΄ νμ΄μ£Όμλ©΄ κ°μ₯ μμͺ½μ μλ μ μ¬κ°νμ ν(μ΄)μ μ μ μκ² λ©λλ€.
μμλ‘ μ€λͺ λ리면 μλ νμμ κ°μ΄λ° μ«μκ° nμ΄λΌλ©΄ λΉ¨κ°μμ΄ λκ³ μμ μ λλ¬μΌ μΈκ°μ μλ νλμμ΄ λ©λλ€. νλμμΈ μ«μ μ€ κ°μ₯ μμ μλ 0μ΄λ―λ‘ λΉ¨κ°μμΈ 1μ 0μ λνλ€λ©΄ 1μ΄ λλ―λ‘ nμ 1 κ·Έλλ‘ λ¨μ΅λλ€.
0 | 1 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
λͺ¨λ μμ μ΄κ²μ μ μ©νλ©΄ μ΄μ κ°μ΄ λ³νκ³ μ΄ μ€ κ°μ₯ ν° μλ 2μ΄λ―λ‘ 2μ μ κ³±μ 4κ° λμ κ°μ₯ ν° μ μ¬κ°νμ λμ΄λ 4κ° λ©λλ€.
0 | 1 | 1 |
0 | 1 | 2 |
1 | 0 | 1 |
μ½λμ€λͺ
κ°μ₯ λ¨Όμ findMinν¨μμ solutionμ boardκ°μ 곡μ νκΈ° μν΄ boardλ₯Ό 볡μ¬ν κ°μ λ΄μ λ³μλ₯Ό λ§λ€μ΄μ€λλ€. - > var boardCopy = [[Int]]()
κ·Έ λ€μ solutionμ 보기 μ μ μλμ μλ findMinν¨μλΆν° μμλ³΄κ² μ΅λλ€.
findMinμ μΈμκ°μΌλ‘ n(νμ¬μ μ)κ³Ό row(μ΄),line(ν)μ κ°μ§λ©° μ μλ₯Ό λ°ννλλ‘ λμ΄μμ΅λλ€.
-> func findMin(_ n:Int,_ row:Int,_ line:Int) -> Int {...)
λ°νκ°μ 보면 nκ³Ό κ°μ μ΄μμ μμͺ½ νμ μ -> boardCopy[row][line-1]
μμ λ³΄λ€ νλ μμ μ΄μμ μμͺ½μ μ -> boardCopy[row-1][line-1],
μμ κ³Ό κ°μ νμμ νλ μμ μ μ€ κ°μ₯ μμ μ -> boardCopy[row-1][line]
μμ κ°μ₯ μμ κ°μ min() λ©μλλ₯Ό ν΅ν΄ λ°ννλλ‘ λμ΄μμ΅λλ€. -> min(boardCopy[row-1][line],boardCopy[row-1][line-1],boardCopy[row][line-1])
solutionμ μ΄ν΄λ³΄λ©΄ nλ€ μ€ κ°μ₯ ν° κ°μ μ μ₯ν λ³μλ₯Ό λ§λ€μ΄μ€λλ€. -> var maxNum = 0
λ¨Όμ μ΄μ΄λ νμ΄ 1λ‘ λμ΄μλ 보λλ μ μ¬κ°νμ΄ 1μ΄ κ°μ₯ ν¬κΈ° λλ¬Έμ 1μ λ°νν΄μ€λλ€. - > if board.count == 1 || board.filter({$0.count > 1}).count == 0 { return 1 }
boardμμ λ°°μ΄λ€μ 1λΆν° μ°¨λ‘λ‘ forλ¬Έμ μ΄μ©ν΄ νμν©λλ€. (1λΆν° νμνλ μ΄μ λ 0λ²μ§Έ νμ μμ μ λλ¬μΌ μΈκ°μ μλ₯Ό ꡬν μκ° μκΈ° λλ¬Έμ λλ€.) - > for i in 1..<board.count {...}
κ·Έλ¦¬κ³ λ°λ‘ boardμμ λ°°μ΄λ€μ μμ forλ¬Έμ μ΄μ©ν΄ νμν©λλ€. -> for j in 1..<board[i].count {...}
λ§μ½ nμ΄ 0μ΄ μλλΌλ©΄ (λ§μ½ 0μ΄λΌλ©΄ μμ μ λλ¬μΌ 3κ°μ μλ₯Ό ꡬν νμκ° μμ. ) nμ κ°μ₯ μμ μλ₯Ό λν΄μ£Όκ³ μ΄κ²μ΄ κ°μ₯ ν° μλΌλ©΄ (max()λ©μλλ‘ λΉκ΅) maxNumμ λ°κΏμ€λλ€.(nμ board[i][j] μ΄μ i νμ jκ° λ κ²μ λλ€.)- >
if boardCopy[i][j] != 0 {
boardCopy[i][j] += findMin(board[i][j], i, j)
maxNum = max(maxNum, boardCopy[i][j])
}
boardμμ λ€ νμν λ€ maxNumμ pow()λ©μλ μ¬μ©νμ¬ μ κ³±ν κ°μ λ°νν΄μ€λλ€.(pow()λ©μλλ μΈμκ°μ Doubleλ‘ λ°μ΅λλ€.) ->
return Int(pow(Double(maxNum),2.0))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import Foundation
var boardCopy = [[Int]]()
func solution(_ board:[[Int]]) -> Int
{
var maxNum = 0
boardCopy = board if board.count == 1 || board.filter({$0.count > 1}).count == 0 {
return 1
}
for i in 1..<board.count {
for j in 1..<board[i].count {
if boardCopy[i][j] != 0 {
boardCopy[i][j] += findMin(board[i][j], i, j)
maxNum = max(maxNum, boardCopy[i][j])
}
}
}
return Int(pow(Double(maxNum),2.0))
}
func findMin(_ n:Int,_ row:Int,_ line:Int) -> Int {
return min(boardCopy[row-1][line],boardCopy[row-1][line-1],boardCopy[row][line-1])
}
|
μλ‘κ² μκ² λ κ²
nμ κ³±μ ꡬν λ pow(Double(n),Double(μ κ³±ν μ))λ₯Ό μ¬μ©νμ¬ κ΅¬ν μ μλ€.
λμ κ³νλ²
'π Problem Solution > Programmers' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘κ·Έλλ¨Έμ€ μκ° μ½λ μ±λ¦°μ§ 1 μΏΌλμμΆ ν κ°μ μΈκΈ° Swift (0) | 2020.11.05 |
---|---|
2018 KAKAO BLIND RECRUITMENT [3μ°¨] nμ§μ κ²μ Swift (0) | 2020.11.02 |
2018 KAKAO BLIND RECRUITMENT [1μ°¨] λ΄μ€ ν΄λ¬μ€ν°λ§ Swift (0) | 2020.10.20 |
νλ‘κ·Έλλ¨Έμ€ μμ λ§λ€κΈ° Swift (0) | 2020.10.19 |
2018 KAKAO BLIND RECRUITMENT [1μ°¨] μΊμ Swift (0) | 2020.10.17 |
λκΈ