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;
}
}
![](https://velog.velcdn.com/images/as9587/post/aecf373c-1334-454d-bf4a-031fda87c541/image.png)
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;
}
}
![](https://velog.velcdn.com/images/as9587/post/6a8c0625-acee-4025-a8e6-76ed00790138/image.png)
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;
}
}
![](https://velog.velcdn.com/images/as9587/post/90bea7a9-793a-48a1-9ea8-f21980b0a59c/image.png)
테스트 결과 - 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;
}
}
![](https://velog.velcdn.com/images/as9587/post/d33b5d2e-8d79-41f7-9fb2-11c29c78e988/image.png)
결론
![](https://velog.velcdn.com/images/as9587/post/2a3ee63b-2df6-4322-ad04-1f93b922ece4/image.png)
![](https://velog.velcdn.com/images/as9587/post/2e0aa4a6-1a72-411b-bc8b-98e876eb5d0e/image.png)