Swift Data Structure And Algorithm/Dynamic Programming
μμ μ±μ·¨
youngjaeLee1026
2022. 4. 12. 17:30
1. λ¬Έμ
2. μ μΆλ ₯
3. μ μΆλ ₯ μμ
4. λ¬Έμ μ€κ³
- λ‘λ΄μ μμμ μμ μ€λ₯Έμͺ½κ³Ό μλμͺ½μΌλ‘λ§ μ΄λν μ μλ κ²μ λ°λλ‘ μκ°νλ©΄, μ’ μ°©μ μ κΈ°μ€μΌλ‘λ
- μΌμͺ½κ³Ό μμͺ½μμ λ ν° μμμ μμ§νλ©΄μ μ’ μ°©μ κΉμ§ λλ¬ν κ²μμ μμΈ‘ν μ μμ
- λ°λΌμ ν° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μμ λ¬Έμ λΆν° μ°¨κ·Όμ°¨κ·Ό ν΄κ²°ν΄ λκ°λ λμ κ³νλ²μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ
- λ°λΌμ, T[i][j] = λλ₯Ό κΈ°μ€μΌλ‘ μΌμͺ½κ³Ό μ€λ₯Έμͺ½ μ€ λ ν° κ°μ λμκ² λν κ°μ΄κ³ ,
- T[i][j] + Max(T[i - 1][j], T[i][j - 1])λ‘ μ νμμ μΈμΈ μ μμ
- (0, 0)μμλ μμ μΌμͺ½μ΄ μμΌλ―λ‘, (1, 1)λΆν° μμλ₯Ό μ±μλκ³ μ μ νμμ μ μ©νμ¬ μ΅μ’ μ μΌλ‘ T[N][M]μ λμ λ κ°μ΄
- μ λ΅μ΄λ©°, O(N * M)μ μκ°λ³΅μ‘λλ‘ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ
5. μ 체 μ½λ
//MARK: - μμ μ±μ·¨
//MARK: - Framework
import Foundation
//MARK: - Function
func solution() -> Void {
//MARK: - Input
guard let input = readLine()?.components(separatedBy: " ") else { return }
let N: Int = input.map { Int($0) }[0] ?? 0
let M: Int = input.map { Int($0) }[1] ?? 0
var table: [[Int]] = Array(repeating: Array(repeating: 0, count: M + 10), count: N + 10)
for i in 1...N {
guard let inputArray = readLine()?.components(separatedBy: " ") else { return }
for j in 1...M {
table[i][j] = inputArray.map { Int($0) ?? 0 }[j - 1]
}
}
//MARK: - Process
for i in 1...N {
for j in 1...M {
table[i][j] += table[i][j - 1] < table[i - 1][j] ? table[i - 1][j] : table[i][j - 1]
}
}
//MARK: - Output
print(table[N][M])
}
solution()
μ 체μ½λλ μ¬κΈ°μμ νμΈν μ μμ΅λλ€.