Programmers/Level3
줄 서는 방법
zzunsik
2021. 11. 27. 12:59
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
|
import java.util.*;
class Solution {
static long Factorial(int n) {
if(n == 1)
return 1;
return n * Factorial(n - 1);
}
public int[] solution(int n, long k) {
int[] answer = new int[n];
ArrayList<Integer> persons = new ArrayList<Integer>();
for(int i=1;i<=n;i++)
persons.add(i);
k--;
int pos = 0;
while(n > 0) {
long nextNum = Factorial(n) / n;
int idx = (int) (k / nextNum);
answer[pos] = persons.remove(idx);
k = k % nextNum;
n--;
pos++;
}
return answer;
}
}
|
cs |
각 자리마다 같은 수가 몇 번 반복되는지 확인하는 것이 중요하다.
해당 값을 nextNum에 저장하고 k를 nextNum으로 나눠서 다음 수의 인덱스 번호를 알 수 있게 된다.
이 때 맨 처음에 k를 1 감소시켜 인덱스 값이 맞도록 조정해야 한다.
다음으로 고르는 수는 k값을 갱신하고 같은 방법으로 구할 수 있다.