요구능력 : DP에 대한 이해
코드설명 :
문제를 설명해주면 1과 2와 3중 한개 이상을 더해서 주어진 수를 만드는 문제이다.
처음 접해보시는 분들은 어렵게 느껴질 수도 있는데, 이 문제만 정확히 이해하면 다른 더하기 DP문제들은 꽤 쉽게 풀릴것이다.
그림을 보면 파란색글씨로 + 1, + 2, +3 을 해놓은것을 볼 수 있다.
1, 2, 3더하기니까 이렇게 1, 2, 3을 기준으로 앞에 들어와야 할 수를 구해준다.
이게 가능한건 DP이기 때문에 가능하다.
+1, +2, +3앞에 오는 수가 무엇이든간에 이미 1과 2와 3의 조합으로만 더해놨기 때문이다.
위의 그림에 5를 보면 이전에 4를 1과 2와 3의 조합으로 해놨기 때문에, 4에 조합된 개수를 그대로 가져오는걸 볼 수 있다.
이해가 안간다면 여러번보고 그래도 안가면 외우고 여러개 풀다보면 이해가간다.
후기 : 이전에 풀었던 1,2,3 문제들 보다는 훨씬쉬웠다.
let t = Int(String(readLine()!))!
var arr = [Int]()
var dp: [Int] = Array(repeating: 0, count: 1000001)
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in stride(from: 4, through: 1000000, by: 1) {
dp[i] = (dp[i - 1] + dp[i - 2] + dp[i - 3]) % 1000000009
}
for _ in 1...t {
let a = Int(String(readLine()!))!
print(dp[a])
}
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][BruteForce] 백준 14889번(스타트와 링크) (0) | 2021.11.04 |
---|---|
[Swift][BruteForce] 백준 6603번 (로또) (0) | 2021.11.02 |
[Swift][DP] 백준 2225번 (합분해) (0) | 2021.11.01 |
[Swift][DP] 백준 14051번 (퇴사) (0) | 2021.10.08 |
[Swift][BFS] 백준 2178번 (미로탐색) (0) | 2021.10.08 |
댓글