1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import java.util.ArrayList;
import java.util.Arrays;
public class LineCombination {
public int[] setAlign(int n, long k) {
int[] answer = new int[n];
ArrayList<Integer> list = new ArrayList<Integer>();
int[] fac = new int[n+1];
fac[0] = 1;
for(int i=1;i<n;i++) {
fac[i] = fac[i-1]*i;
}
int idx = 0;
for(int i=0;i<n;i++) {
list.add(i+1);
}
for(int i=0;i<n;i++) {
idx=(int) ((k-1)/fac[n-1-i]);
answer[i]=list.get(idx);
list.remove(idx);
k=(k-1)%fac[n-1-i]+1;
}
return answer;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
LineCombination lc = new LineCombination();
System.out.println(Arrays.toString(lc.setAlign(4, 1)));
}
}
|