Linked List 사용 - 효율성 2번 시간 초과
import java.util.LinkedList;
import java.util.List;
class Solution {
List<Integer> list;
int[] answer;
public int[] solution(int n, long k) {
long[] factorial = new long[n + 1];
factorial[0] = 1;
for (int i = 1; i < n + 1; i++) {
factorial[i] = factorial[i - 1] * i;
}
list = new LinkedList<>();
for (int i = 1; i < n + 1; i++) {
list.add(i);
}
k = k - 1;
answer = new int[n];
int idx = 0;
while (idx != n) {
long duplicationNum = factorial[n - idx - 1];
int digitIdx = (int) (k / duplicationNum);
answer[idx] = list.remove(digitIdx);
k %= duplicationNum;
idx++;
}
return answer;
}
}
Array List 사용 - 효율성 2번 시간 초과
import java.util.ArrayList;
import java.util.List;
class Solution {
List<Integer> list;
int[] answer;
public int[] solution(int n, long k) {
long[] factorial = new long[n + 1];
factorial[0] = 1;
for (int i = 1; i < n + 1; i++) {
factorial[i] = factorial[i - 1] * i;
}
list = new ArrayList<>(21);
for (int i = 1; i < n + 1; i++) {
list.add(i);
}
k = k - 1;
answer = new int[n];
int idx = 0;
while (idx != n) {
long duplicationNum = factorial[n - idx - 1];
int digitIdx = (int) (k / duplicationNum);
answer[idx] = list.remove(digitIdx);
k %= duplicationNum;
idx++;
}
return answer;
}
}
LinkedList 와 ArrayList 에서 시간차이가 약 5배 가까이 나는 이유
테스트 결과 - LinkedList
import java.util.LinkedList;
import java.util.List;
class Solution {
List<Integer> list;
int[] answer;
public int[] solution(int n, long k) {
long[] factorial = new long[n + 1];
factorial[0] = 1;
for (int i = 1; i < n + 1; i++) {
factorial[i] = factorial[i - 1] * i;
}
list = new LinkedList<>();
for (int i = 1; i < n + 1; i++) {
list.add(i);
}
k = k - 1;
answer = new int[n];
return answer;
}
}
테스트 결과 - ArrayList
import java.util.ArrayList;
import java.util.List;
class Solution {
List<Integer> list;
int[] answer;
public int[] solution(int n, long k) {
long[] factorial = new long[n + 1];
factorial[0] = 1;
for (int i = 1; i < n + 1; i++) {
factorial[i] = factorial[i - 1] * i;
}
list = new ArrayList<>(21);
for (int i = 1; i < n + 1; i++) {
list.add(i);
}
k = k - 1;
answer = new int[n];
return answer;
}
}
결론