Algorithm/Baekjoon

[λ°±μ€€] (Swift) 11057번 - 였λ₯΄λ§‰ 수 (dp, 3쀑 forλ¬Έ μ‚¬μš©)

감자 πŸ₯” 2022. 3. 25. 00:09
λ°˜μ‘ν˜•

문제 링크

https://www.acmicpc.net/problem/11057

 

11057번: 였λ₯΄λ§‰ 수

였λ₯΄λ§‰ μˆ˜λŠ” 수의 μžλ¦¬κ°€ μ˜€λ¦„μ°¨μˆœμ„ μ΄λ£¨λŠ” 수λ₯Ό λ§ν•œλ‹€. μ΄λ•Œ, μΈμ ‘ν•œ μˆ˜κ°€ 같아도 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μΉœλ‹€. 예λ₯Ό λ“€μ–΄, 2234와 3678, 11119λŠ” 였λ₯΄λ§‰ μˆ˜μ΄μ§€λ§Œ, 2232, 3676, 91111은 였λ₯΄λ§‰ μˆ˜κ°€ μ•„λ‹ˆλ‹€. 수

www.acmicpc.net

 

λ‚΄κ°€ ν‘Ό 풀이 - λ§žμ•˜μŠ΅λ‹ˆλ‹€!

let n = Int(readLine()!)!
var dp = Array(repeating: Array(repeating: 0, count: 10), count: 1001)

//sum ν•¨μˆ˜ κ΅¬ν˜„
func sum(_ numbers: [Int]) -> Int {
    return numbers.reduce(0, +)
}

// ν•œμžλ¦¬μˆ˜λŠ” 무쑰건 1κ°œμ”©
for i in 0...9 {
    dp[1][i] = 1
}

if n ==  1 {
    print(sum(dp[1]))
} else {
    for i in 2..<n+1 {
        for j in 0...9 {
            for k in j...9 {
                dp[i][j] = (dp[i][j] + dp[i-1][k]) % 10007
            }
        }
    }
    print(sum(dp[n])%10007)
}
λ°˜μ‘ν˜•