1. λ¬Έμ
2. μ μΆλ ₯
3. μ μΆλ ₯ μμ
4. λ¬Έμ μ€κ³
- Nμ΄ 100,000μ΄κΈ° λλ¬Έμ O(N^2) μμ νμμΌλ‘ λ¬Έμ λ₯Ό μκ°μμ ν΄κ²°ν μ μμ λΏλλ¬, μ΄μ μ μ ννλ λ²νΌμ λ€μ μ°¨λ‘μμ μ ννμ§ μκ³ , νμ¬ μ°¨λ‘μ μ νν λ²νΌμ λ€μ μ°¨λ‘μμ μ νν μ μκ³ μ΄μ μ°¨λ‘λ λ€μ μ°¨λ‘μμ μ νν μ μλ ν¨ν΄μ ꡬννκΈ°λ κΉλ€λ‘μ
- λ°λΌμ νμ¬ μμ μ κΈ°μ€μΌλ‘ μ΄μ μμ μ λ°λΌλ΄€μ λ, νμ¬ λ²νΌμ μ ννκ² λλ©΄ μ΄μ λ²νΌμμ νμ¬ λ²νΌμ μ μΈν λλ¨Έμ§ 2λ²νΌ μ€ μ΅λ κ°μ νμ¬ λ²νΌ κ°μ λνλ ν¨ν΄μ μ°Ύμ μ μκ³ , μ¦ μ΄λ¬ν κ³Όμ μ Nκ°μ μκ°μ λν΄ λ°λ³΅νκ² λλ―λ‘
- μμ λ¬Έμ λ₯Ό ν΄κ²°νμ¬ ν° λ¬Έμ λ₯Ό ν΄κ²°νλ λμ κ³νλ²μ μ¬μ©ν μ μμ
- μ κ³Όμ μ λ°λ³΅νκ³ μ΅μ’ μ μΌλ‘ Nμ΄μ ν΄λΉ νλ κ° μ€ μ΅λκ°μ μ°ΎμμΌλ‘μ¨ λ¬Έμ λ₯Ό ν΄κ²°νλ―λ‘ O(N)μ μκ°λ³΅μ‘λλ‘ ν΄κ²°ν μ μμ
5. μ 체 μ½λ
//MARK: - λ²νΌ λλ₯΄κΈ°
//MARK: - Framework
import Foundation
//MARK: - Function
func getMax(_ array: [[Int]], _ baseCondition: Int, _ N: Int) -> Int {
var result: Int = 0
for i in 0..<baseCondition {
result = result < array[N - 1][i] ? array[N - 1][i] : result
}
return result
}
func solution() -> Void {
//MARK: - Input
guard let N: Int = Int(readLine() ?? "0") else { return }
let baseCondition: Int = 3
var result: Int = 0
var buttonValues: [[Int]] = []
for _ in 0..<N {
guard let inputData: [String] = readLine()?.components(separatedBy: " ") else { return }
buttonValues.append(inputData.map { Int($0) ?? 0 })
}
//MARK: - Process
//1. λΆλΆ λ¬Έμ λ₯Ό μ μνλ€.
//max(T[N - 1][0], T[N - 1][1], T[N - 1][2) = κ° μ΄λ§λ€ μ΄μ μμ μμ μ νν λ²νΌμ μ μΈν λ²νΌμ μ ννμ λ λμ ν©μ μ΅λκ°
//2. μ νμμ μΈμ΄λ€.
//T[i][0] += T[i - 1][1] < T[i - 1][2] ? T[i - 1][2] : T[i - 1][1]
//T[i][1] += T[i - 1][0] < T[i - 1][2] ? T[i - 1][2] : T[i - 1][0]
//T[i][2] += T[i - 1][0] < T[i - 1][1] ? T[i - 1][1] : T[i - 1][0]
//...T[N - 1][0], T[N - 1][1], T[N - 1][2] κΉμ§
//max(T[N - 1][0], T[N - 1][1], T[N - 1][2)
for i in stride(from: 1, to: N, by: 1) {
buttonValues[i][0] += buttonValues[i - 1][1] < buttonValues[i - 1][2] ? buttonValues[i - 1][2] : buttonValues[i - 1][1]
buttonValues[i][1] += buttonValues[i - 1][0] < buttonValues[i - 1][2] ? buttonValues[i - 1][2] : buttonValues[i - 1][0]
buttonValues[i][2] += buttonValues[i - 1][1] < buttonValues[i - 1][0] ? buttonValues[i - 1][0] : buttonValues[i - 1][1]
}
result = getMax(buttonValues, baseCondition, N)
//MARK: - Output
print(result)
}
solution()
μ 체μ½λλ μ¬κΈ°μμ νμΈν μ μμ΅λλ€.
'Swift Data Structure And Algorithm > Dynamic Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ κ³±μμ ν© (0) | 2022.04.08 |
---|---|
μ§μ¬κ°νλ°°μΉμκ²½μ°μμ (0) | 2022.04.08 |
μΉ΄λ λμ΄ (0) | 2022.04.08 |
κ΅¬μ¬ κ²μ (0) | 2022.04.08 |
μ§μ¬κ°νμ ν© (0) | 2022.04.08 |