본문 바로가기

Programmers/Level3

줄 서는 방법

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