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값을 갱신하고 같은 방법으로 구할 수 있다.
'Programmers > Level3' 카테고리의 다른 글
헤비 유저가 소유한 장소 (0) | 2021.12.23 |
---|---|
있었는데요 없었습니다 (0) | 2021.12.23 |
외벽 점검 (0) | 2021.11.26 |
야근 지수 (0) | 2021.11.24 |
합승 택시 요금 (0) | 2021.11.10 |