코딩테스트 문제 1
문제
N명의 학생의 발표순서가 될 수 있는 경우의 수가 차례대로 정렬되어 있다면, K의 발표 순서가 몇 번째 경우의 수인지를 답하라
예시
Number타입의 Array (0 <= index)
ex) n이 3이고 k가 [2, 3, 1]일 경우
모든 경우의 수를 2차원 배열에 담는다면 [[1,2,3],[1,3,2],[2,1,3],[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;
}
Author And Source
이 문제에 관하여(코딩테스트 문제 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jelkov/코딩테스트-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)