[JavaScript] 프로그래머스 줄 서는 방법 LEVEL3

김예진·2021년 1월 21일
0

코딩 테스트

목록 보기
27/42

문제출처

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의 몇번째 값이 될 것인지이다.

코드 참고
풀이 참고

0개의 댓글