Swift Data Structure And Algorithm/Dynamic Programming
κ΅¬μ¬ κ²μ
youngjaeLee1026
2022. 4. 8. 21:14
1. λ¬Έμ
2. μ μΆλ ₯
3. μ μΆλ ₯ μμ
4. λ¬Έμ μ€κ³
- μ²μ λ¬Έμ λ₯Ό μ νμ λ, μμ νμμΌλ‘ λ¬Έμ λ₯Ό μ€κ³νκΈ°κ° κΉλ€λ‘μ
- λ°λΌμ κ·μΉμ μ΄ν΄λ³΄λ©΄, ꡬμ¬μ 1κ° ~ 3κ° κ°μ Έκ° μ μμΌλ―λ‘, 1 ~ 3κ°μΌ λλ μ² μκ° λ¨Όμ κ°μ Έκ°λ―λ‘ μ΄κΈΈ μ λ°μ μμ
- 4κ°μ κ²½μ° λ°μ Έλ³΄λ©΄, μν¬κ° μ΄κΈΈ μ λ°μ μμ 5κ° 6κ° 7κ° μΌλλ μ² μκ° μ΄κΈΈ μ μλ κ²½μ°κ° μμ
- 8κ°μ κ²½μ° μν¬κ° μ΄κΈΈ μ λ°μ μμ. λ°λΌμ 4λ‘ λλμ΄ λ¨μ΄μ§λ κ²½μ°, μν¬κ° μ΄κΈ°κ³ μλ κ²½μ°λ μ² μκ° μ΄κΈΈ κ°λ₯μ±μ΄ μλ κ²μ κ°λ¨νκ² μ μ μμ§λ§, λμ κ³νλ²μ νμ΄ν μλ μμ
- μ² μμ μν¬κ° 곡ννκ² λ²κ°μ κ°λ©΄μ ꡬμ¬μ μ΅μ μ λ€ν΄ κ°μ Έκ°λ―λ‘, νμ¬ μμ μ΄ μ² μκ° κ΅¬μ¬μ κ°μ Έκ°λ μμ μ΄λΌκ³ κ°μ νλ©΄,
- μ΄μ μμ μμ μν¬κ° ꡬμ¬μ 1κ° κ°μ Έκ°μ λ, 2κ° κ°μ Έκ°μ λ, 3κ° κ°μ Έκ°μ λ λͺ¨λ μΉλ¦¬λΌλ©΄ μ² μκ° μ΄κΈΈ κ°λ₯μ±μ μκ³ , νκ°μ§ κ²½μ°λΌλ ν¨λ°°μΈ κ²½μ°κ° μλ€λ©΄ μ² μκ° μ΄κΈΈ κ°λ₯μ±μ΄ μλ κ²μ μ μ μμ
- λ μκ³ λ¦¬μ¦ λͺ¨λ O(N)μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ
5. μ 체 μ½λ
//MARK: - κ΅¬μ¬ κ²μ
//MARK: - Framework
import Foundation
//MARK: - Function
func solution() -> Void {
//MARK: - Input
guard let n: Int = Int(readLine() ?? "0") else { return }
var marbleGames: [Bool] = Array(repeating: false, count: n + 10)
let baseCondition: Int = 3
//MARK: - Process
//1. λΆλΆ λ¬Έμ λ₯Ό μ μνλ€.
//nκ°μ ꡬμ¬μ΄ μ£Όμ΄μ‘μ λ, 1κ°, 2κ°, 3κ°μ© κ°μ Έκ°λ€ νμ λ, μ² μκ° μ΄κΈΈ μ μλμ§ κ΅¬ν΄μΌ ν¨.
//T[i] = μ² μκ° μ΄κΈΈ κ²½μ°κ° νκ°λΌλ μμΌλ©΄ true, μμΌλ©΄ false
//2. μ νμμ μΈμ΄λ€.
//κ° κ²μμ μ² μλΆν° μμν΄μ 곡ννκ² νλ²μ© μ§νλλ κ²κ³Ό, ν λ²μ 1κ° νΉμ 2κ° νΉμ 3κ°λ₯Ό κ°μ Έκ° μ μλ€λ μ μ μ μν΄μ
//νμ¬ μμ μμ μ΄μ κ²°κ³Όμ μν΄ κ²°μ μ΄ λ¨
//T[i] = 1κ° κ°μ Έκ°μ λ κ²°κ³Ό && 2κ° κ°μ Έκ°μ λ κ²°κ³Ό && 3κ° κ°μ Έκ°μ λ κ²°κ³Ό
//μ¦, T[i] = T[i - 1] && T[i - 2] && T[i - 3] ? false : true(μ΄μ κ²°κ³Όλ μν¬μ μ°¨λ‘ μ΄λ―λ‘ λ°λκ° λμ΄μΌ ν¨)
for i in 1...baseCondition {
marbleGames[i] = true
}
for i in stride(from: baseCondition + 1, through: n, by: 1) {
marbleGames[i] = marbleGames[i - 1] && marbleGames[i - 2] && marbleGames[i - 3] ? false : true
}
//MARK: - Output
print(marbleGames[n] ? "YES" : "NO")
}
solution()
μ 체μ½λλ μ¬κΈ°μμ νμΈν μ μμ΅λλ€.