function solution(n, k) {
var answer = [];
let arr = Array.from({length: n}, (_,i) => i + 1);
let fac = arr.reduce((acc, val) => acc * val, 1);
k--;
while (answer.length !== n) {
fac = fac / arr.length;
let temp = arr[Math.floor(k / fac)];
answer.push(temp);
k = k % fac;
arr = arr.filter(e => e !== temp);
// console.log(fac, temp, answer, k, arr)
}
return answer;
}
fac
: (n-1)!arr
: n까지의 숫자를 순서대로 저장한 배열. arr중 한개의 숫자를 빼서 answer에 저장한다.k
: arr에서 몇번째 원소를 의미하는지. 배열이 0부터 시작하니까 처음에 1을 빼고 시작. n=4, k=7 일때를 예로 들면, arr=[1,2,3,4]가 된다.
처음에 while문을 한번 돌게 되면 arr은 [1,3,4], answer은 [2]가 된다.
왜냐하면 k / fac
에 의해서 temp가 arr[1]번째가 되고 2가 맨 앞에 들어가게 되기 때문이다.
그 다음 while문을 돌땐 arr은 [3,4], answer은 [2,1]이 된다.
중요한 것은 while문을 돌면서 answer의 그 다음값은 arr의 몇번째 값이 될 것인지
이다.