# 풀이
- 같은 것이 있는 순열 공식에 따라 풀이를 진행
- 팩토리얼 계산만 재귀가 아닌 DP로 풀이
- 최악의 경우 11! 계산 결과가
39916800
이므로 오버플로우 발생하지 않음
import Foundation
let T = Int(readLine()!)!
// a+b+c! / a!b!c!
// 1 * x + 2 * y + 3 * z == n
func factorial(_ n: Int) -> Int {
var dp: [Int] = .init(repeating: 0, count: n + 1)
dp[0] = 1
if n == 0 {
return 1
}
for i in 1...n {
dp[i] = dp[i-1] * i
}
return dp[n]
}
for _ in 0..<T {
let n = Int(readLine()!)!
var tuple: [(Int, Int, Int)] = []
for i in 0...n {
for j in 0...n {
for k in 0...n {
if i + 2 * j + 3 * k == n {
tuple.append((i,j,k))
}
}
}
}
var sum = 0
for tup in tuple {
let (a,b,c) = tup
sum += (factorial(a+b+c) / (factorial(a) * factorial(b) * factorial(c)))
}
print(sum)
}