Swift Data Structure And Algorithm/Dynamic Programming

μ§μ‚¬κ°ν˜•λ°°μΉ˜μ˜κ²½μš°μ˜μˆ˜

youngjaeLee1026 2022. 4. 8. 21:15

1. 문제

스크란샷 2022-04-08 21 12 01

2. μž…μΆœλ ₯

스크란샷 2022-04-08 21 12 11

3. μž…μΆœλ ₯ μ˜ˆμ‹œ

스크란샷 2022-04-08 21 12 20

4. 문제 섀계

  • N = 3인 경우, 2 x 1의 νƒ€μΌλ‘œ 2 x 3의 타일을 μ±„μšΈ 수 μžˆλŠ” 경우의 수λ₯Ό ꡬ해야 함
  • 였λ₯Έμͺ½ 끝의 2 x 1 타일이 μ„Έμ›Œμ Έ μžˆλŠ” κ²½μš°μ™€, λˆ„μ›Œ μžˆλŠ” 경우λ₯Ό μƒκ°ν•΄λ³΄μ•˜μ„ λ•Œ, μ„Έμ›Œμ Έ μžˆλŠ” κ²½μš°λŠ” μ•žμ˜ 2개의 2 x 1 타일도 μ„Έμ›Œμ Έ μžˆμ–΄μ•Ό ν•˜λŠ” κ²½μš°μ™€ μ•žμ˜ 2개의 2 x 1 타일이 측으둜 λ‚˜λˆ„μ–΄μ Έ μžˆλŠ” κ²½μš°μ— λ‚˜λ¨Έμ§€ 2 x 1 타일을 1개 μ„Έμš°λŠ” 경우둜 λ³Ό 수 μžˆμœΌλ―€λ‘œ 즉, 2 x 2의 타일을 μ±„μ›Œμ•Ό ν•˜λŠ” 경우의 μˆ˜μ™€ κ°™μŒ
  • λˆ„μ›Œμ Έ μžˆλŠ” κ²½μš°λŠ” 혼자 λˆ„μ›Œμ Έ μžˆμ„ 수 μ—†μœΌλ―€λ‘œ 2κ°œκ°€ 측으둜 λ‚˜λˆ„μ–΄μ Έ 있고, μ•žμ— 2 x 1 타일 1κ°œκ°€ μ„Έμ›Œμ Έ μžˆμ„ 수 밖에 μ—†μŒ 즉, 2 x 1의 타일을 μ±„μ›Œμ•Ό ν•˜λŠ” 경우의 μˆ˜μ™€ κ°™μŒ
  • λ”°λΌμ„œ μœ„ 경우의 수λ₯Ό λͺ¨λ‘ λ”ν•œ 값이 2 x 3을 μ±„μšΈ 수 μžˆλŠ” λͺ¨λ“  경우의 μˆ˜μž„μ„ μ•Œ 수 있고, 2 x 2, 2 x 1의 타일을 μ±„μ›Œμ•Ό ν•˜λŠ” 경우의 수의 ν•©μ΄λ―€λ‘œ μ „ν˜•μ μΈ 동적 κ³„νšλ²•μ΄λ©° ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μž„μ„ μ•Œ 수 있음

5. 전체 μ½”λ“œ

//MARK: - μ§μ‚¬κ°ν˜•λ°°μΉ˜μ˜κ²½μš°μ˜μˆ˜

//MARK: - Framework
import Foundation

//MARK: - Function
func solution() -> Void {
    //MARK: - Input
    guard let N: Int = Int(readLine() ?? "0") else { return }
    
    let baseCondition: Int = 2
    var T: [Int] = Array(repeating: 0, count: N + 10)
    
    //MARK: - Process
    //1. λΆ€λΆ„ 문제λ₯Ό μ •μ˜ν•œλ‹€.
    //T[i] = 2 x 1 λͺ¨μ–‘μ˜ νƒ€μΌλ‘œ 2 x i 크기의 타일을 μ±„μšΈ 수 μžˆλŠ” λͺ¨λ“  경우의 수
    
    //2. 점화식을 μ„Έμš΄λ‹€.
    //T[i] = T[i - 1] + T[i - 2] -> ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄
    for i in 1...baseCondition {
        T[i] = i
    }
    
    for i in stride(from: baseCondition + 1, through: N, by: 1) {
        T[i] = (T[i - 1] + T[i - 2]) % 1000007
    }
    
    //MARK: - Output
    print(T[N])
}
solution()

 

μ „μ²΄μ½”λ“œλŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

'Swift Data Structure And Algorithm > Dynamic Programming' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μžμ› 채취  (0) 2022.04.12
제곱수의 ν•©  (0) 2022.04.08
λ²„νŠΌ λˆ„λ₯΄κΈ°  (0) 2022.04.08
μΉ΄λ“œ 놀이  (0) 2022.04.08
ꡬ슬 κ²Œμž„  (0) 2022.04.08