function orderOfPresentation (N, K) {
function factorial (n){
if(n<=1) return 1
return n * factorial(n-1)
}
let order = 0
let usecheck = Array(1+N).fill(false)
for(let i = 0 ; i<K.length ; i++){
let num =K[i]
usecheck[num]=true
const not = usecheck.slice(1,num)
const notcount = not.filter((el)=>el===false).length
const push = notcount * factorial(N-i-1)
order +=push
}
return order
}
* N은 입력받은 조의 갯수 K는 입력받은 조를 경우의 수로 모두 나타냈을때 K가 일치하는 경우의 수에서의 순서(인덱스)
* K가 [2,3,1] 이라면 2로 시작하는 경우의 수 전에 1로 시작하는 경우의 수를 우선 먼저 구해야하며 그후 2로 시작하는 경우의 수중 [2,1,3]까지 구하여 총 수가 자신의 위치가 된다.
* Array(1+N)으로 배열은 인덱스가 0인점을 고려하여 4개의 false로 구성된 배열을만든다.
* for문으로 K[i]를 하여 2를 우선 true로 만들어 slice(1~2)를 하여 2전까지의 사용안한 조들의 갯수를 뽑아낸다.
* 뽑아낸 갯수 는 2를 제외한 factiorial를 해야하니 갯수 * fatorial(N-1)이 될수 있도록 하면 1의 경우수를 모두 만들어낸다
* 그 후 [2,1,3]은 for문의 i=2 차례에서 3의 자리에 true가 들어가 2는 이미 앞전에서 true이므로 남은 1이 fatorial에서(n-2)로 추가된다.
'일반 학습 > 코딩 테스트' 카테고리의 다른 글
TOY9: 시간복잡도 거듭제곱 (0) | 2021.10.30 |
---|---|
TOY11: 깊이 우선 탐색 (DFS) (0) | 2021.10.20 |
TOY7: DFS (0) | 2021.10.14 |
TOY5: 계산했던 값은 기억하는 메모리 피보나치 (0) | 2021.10.08 |
코딩 테스트 연습 (0) | 2021.09.30 |
댓글