요구능력 : DP의 개념을 아느냐
코드설명 :
dp[1] = 1
dp[2] = 1 + 1, 2
dp[3] = 1 + 1 + 1, 2 + 1, 1 + 2, 3
위를 보면 1, 2, 3이 dp 3까지 들어가므로 예외(?)로 치고 먼저 선언해줫다.
그리고 for문을 4부터 시작해줫는데 dp[4] 일 때 dp[1] + dp[2] + dp[3] = dp[4]가 되는것을 보고 아래 점화식을 도출했다.
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
후기 : DP개념을 알고, 숫자를 끄적여보면 풀수있는문제..
let T = Int(readLine()!)!
var dp = Array(repeating: 0, count: 11)
dp[1] = 1
dp[2] = 2
dp[3] = 4
for _ in 1...T {
let n = Int(readLine()!)!
for i in stride(from: 4, through: n, by: 1) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
}
print("\(dp[n])")
}
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][DP] 백준 16194번 (카드 구매하기 2) (0) | 2021.08.31 |
---|---|
[Swift][DP] 백준 11052번 (카드 구매하기) (0) | 2021.08.30 |
Swift) 백준 11727 (2 x n타일링2) (0) | 2021.08.29 |
Swift) 백준 11726번 (2 x n타일링) (0) | 2021.08.28 |
Swift) 백준 1463번 (1로 만들기) (0) | 2021.08.28 |
댓글