function factorial(n) {
if (n <= 1) return 1
return n * factorial(n - 1)
}
function combinationsCount(n, r) {
return factorial(n) / (factorial(r) * factorial(n - r))
}
function permutationsCount(n, r) {
return factorial(n) / factorial(n - r)
}
function generateCombinations(arr, r) {
const result = []
function backtrack(start, current) {
if (current.length === r) {
result.push([...current])
return
}
for (let i = start; i < arr.length; i++) {
current.push(arr[i])
backtrack(i + 1, current)
current.pop()
}
}
backtrack(0, [])
return result
}
function generatePermutations(arr, r) {
const result = []
function backtrack(current, used) {
if (current.length === r) {
result.push([...current])
return
}
for (let i = 0; i < arr.length; i++) {
if (used[i]) continue
used[i] = true
current.push(arr[i])
backtrack(current, used)
current.pop()
used[i] = false
}
}
backtrack([], Array(arr.length).fill(false))
return result
}
const n = 5,
r = 3
console.log(`팩토리얼(${n}):`, factorial(n))
console.log(`경우의 수(${n}, ${r}):`, combinationsCount(n, r))
console.log(`순열(${n}, ${r}):`, permutationsCount(n, r))
console.log('조합:', generateCombinations([1, 2, 3, 4, 5], 3))
console.log('순열:', generatePermutations([1, 2, 3], 2))
console.log('Math.PI:', Math.PI)
console.log('Math.E:', Math.E)
console.log('Math.abs(-5):', Math.abs(-5))
console.log('Math.sqrt(16):', Math.sqrt(16))
console.log('Math.pow(2, 3):', Math.pow(2, 3))
console.log('Math.round(4.5):', Math.round(4.5))
console.log('Math.ceil(4.2):', Math.ceil(4.2))
console.log('Math.floor(4.8):', Math.floor(4.8))
console.log('Math.max(1, 2, 3):', Math.max(1, 2, 3))
console.log('Math.min(1, 2, 3):', Math.min(1, 2, 3))
console.log('Math.sin(Math.PI / 2):', Math.sin(Math.PI / 2))
console.log('Math.cos(0):', Math.cos(0))
console.log('Math.tan(Math.PI / 4):', Math.tan(Math.PI / 4))
console.log('Math.random():', Math.random())
console.log('Math.log(Math.E):', Math.log(Math.E))
console.log('Math.log10(1000):', Math.log10(1000))