programmers_줄 서는 방법_java
2023. 5. 10. 15:10ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12936
import java.util.*;
class Solution {
public int[] solution(int n, long k) {
int[] answer = new int[n];
List<Integer> list = new ArrayList<>();
for (int i = 1; i<=n; i++){
list.add(i);
}
long[] factorial = facto(n);
k--; // index 처리를 위해 1 빼기
int idx = n-1; // 팩토리얼 인덱스
int tmp = 0; // answer 인덱스
while (true){
int val = (int) (k/factorial[idx]);
answer[tmp++] = list.get(val);
list.remove(val);
k = k % factorial[idx];
idx--;
if(idx == 0) { // idx 가 0인경우 1개의 숫자 만 제외하고 모두 사용됨
answer[tmp] = list.get(0);
break;
}
}
return answer;
}
public long[] facto(int n){
long[] factorial = new long[n+1];
factorial[0] = 0;
factorial[1] = 1;
for (int i = 2; i<=n; i++){
factorial[i] = factorial[i-1] * i;
}
return factorial;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_가장 큰 정사각형 찾기_java (0) | 2023.05.10 |
---|---|
programmers_배달_java (0) | 2023.05.10 |
programmers_전력망을 둘로 나누기_java (0) | 2023.05.09 |
programmers_[카카오 인턴] 수식 최대화_java (0) | 2023.05.02 |
programmers_연속된 부분 수열의 합_java (0) | 2023.04.28 |