コードテスト問題1


質問する
N名の学生の発表順であれば、順番に並べて、Kの発表順が何人目の学生の発表順であるかを回答してください.

番号付けタイプのArray(0<=index)
ex)nが3の場合、kは[2,3,1]である.
すべての場合、2 D配列に1つの数字が含まれている場合、その数字は[1,2,3]、[1,3,2]、[2,3,1]、[3,1,2]、[3,2,1]となり、返される値は3になります.
let output = orderOfPresentation(3, [2, 3, 1]);
console.log(output); // 3

output = orderOfPresentation(5, [1, 3, 2, 4, 5])
console.log(output); // 6
私が書いたコード
function orderOfPresentation (N, K) {
  let arr = [];
  let order = 0;

  for(let i=0; i<N; i++){ //N은 총 조의 수 = K의 길이 
    arr.push(K[i])  // (3, [2, 3, 1]) 이렇게 인자가 주어졌으면, arr = [2,3,1]
    for (let j=1; j<= K[i]-1; j++){
      //배열안에 인자가 1부터 시작하니깐 j=1부터, ex) i=0일때는 j=1까지  / i=1 일때는, j=2까지./ i=2일때는 j는 실행되지 않는다. 
      let sum = 1;
      if(!arr.includes(j)) { // i=0,j=1일때 if문을 확인한다. i=0일때, arr=[2]// i=1일때, arr=[2,3]// i=2일때 arr=[2,3,1] 인 상태이다. j값이 포함되어 있지 않으므로 if문이 실행된다. 
        for(let n=1; n <= N - i -1; n++){ //i=0 일때는 n=2까지// i=1일때 n=1 까지는 // i=2일때 n은 실행되지 않는다.
          sum = n *sum
        }
        order = sum + order
      }
    }
  }
  return order;
    // TODO: 여기에 코드를 작성합니다.
}
// N은 이중배열안에 길이가 N이다. 
// K는 이중배열 인덱스 중 하나이다.
// N개일때 나오는 경우의 수는 3! 이다 3 *2 *1 
その他のコード
function orderOfPresentation(N, K) {
  let arr = [];
  let result = 0;

  function factorial(n) {
    if (n <= 1) {return 1}
    return n * factorial(n - 1);
  }

  for (let i = 0; i < N; i++) {
    arr.push(K[i]);
    const repeatNum = K.filter((v) => K[i] > v && !arr.includes(v)).length;
    result += repeatNum * factorial(N - i - 1);
  }

  return result;
}