본문 바로가기
Algorithm

[Algorithm] Javascript 알고리즘, 프레젠테이션 순서 정하기 문제

by 개발자 염상진 2022. 5. 22.

 

 

 

문제

 

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;
 }

 

 

 

 

 

[Javascript] 명령형 vs 선언형 프로그래밍

Imperative Programming VS Declarative Programming 명령형 프로그래밍 VS 선언형 프로그래밍 리액트와 Javascript를 접하다보면 명령형 프로그래밍과 선언형 프로그래밍을 만나게 된다. 프로그래밍 하는 방식에

about-tech.tistory.com

 

댓글