문제
1<=N<=12 자연수를 입력받는다.
주어진 N은 총 조의 수다.
모든 조별 발표 순서에 대한 경우의 수를 구하고, 배열로 구성된 임의의 발표 순서 K를 입력받아 해당 조의 발표 순서가 몇번째 경우의 수인지를 출력하라
모든 경우의 수를 담은 배열은 번호가 작을 수록 앞에 위치 하게 된다.
예를 들어 N=3, K=[2,3,1] 인 경우 모든 조별 발표 경우의 수는 [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]이 된다. 따라서 발표 순서 K의 경우 3번째 경우에 속한다.
예시)
let output = orderOfPresentation(3, [2, 3, 1]);
console.log(output); // 3
output = orderOfPresentation(5, [1, 3, 2, 4, 5])
console.log(output); // 6
Javascript 소스 코드
function orderOfPresentation (N, K) {
// 순서를 정하는 기준 N-i 까지
const isUsed = Array(N+1).fill(false);
let result = 0;
const factorial = (n)=>{
if(n===0) return 1;
return n*factorial(n-1);
}
for(let i=0; i<K.length; i++){
// 현재 숫자를 저장
const cur = K[i];
isUsed[cur] = true;
const nextArr = isUsed.slice(1, cur);
const validCnt = nextArr.filter((item)=>item===false).length;
const resCnt = validCnt * factorial(N-i-1);
result += resCnt;
}
return result;
}
'Algorithm' 카테고리의 다른 글
[Algorithm] 웹 브라우저 앞으로 가기 뒤로 가기 구현하기 (0) | 2022.05.23 |
---|---|
[Algorithm] Advanced Fibonacci using Memoization (0) | 2022.05.23 |
[Algorithm] 재귀 알고리즘 문제 Javascript (0) | 2022.05.22 |
[Algorithm] 순열(Permutation) 경우의 수 구하는 알고리즘 문제(feat. 재귀(Recursion) 함수 사용) (0) | 2022.05.20 |
[Algorithm] Data Structure Tree , 트리 자료구조란? 이진 탐색 트리 (BST, Binary Search Tree) (0) | 2022.05.16 |
댓글