antop-dev / algorithm

알고리즘 풀이
MIT License
0 stars 0 forks source link

줄 서는 방법 #578

Closed antop-dev closed 2 months ago

antop-dev commented 2 months ago

https://school.programmers.co.kr/learn/courses/30/lessons/12936

antop-dev commented 2 months ago

https://school.programmers.co.kr/questions/24730

import java.util.*;

class Solution {
    public int[] solution(int n, long k) {
        k--; // 0-indexed

        var factorial = 1L;
        var nums = new ArrayList<Integer>();
        // 숫자 리스트 초기화 및 (n-1)! 계산
        for (int i = 1; i <= n; i++) {
            nums.add(i);
            if (i < n) {
                factorial *= i;
            }
        }

        // 순열 생성
        var ans = new int[n];
        var anchor = 0;
        for (int i = n - 1; i >= 1; i--) {
            var index = (int) (k / factorial);
            ans[anchor++] = nums.remove(index);
            k %= factorial;
            factorial /= i;
        }
        // 마지막 남은 숫자 추가
        ans[anchor] = nums.get(0);

        return ans;
    }
}
image