Contents
내가 작성한 코드
내가 작성한 코드
import java.util.*;
class Solution {
public int[] solution(int n, long k) {
int[] answer = new int[n]; // 최종 결과를 담을 배열
List<Integer> people = new ArrayList<>(); // 선택 가능한 숫자들을 담는 리스트
long factorial = 1; // 팩토리얼을 계산하기 위한 변수
// 1부터 n까지 숫자를 리스트에 추가하고 팩토리얼 계산
for (int i = 1; i <= n; i++) {
people.add(i);
factorial *= i; // 팩토리얼 계산
}
k -= 1; // k는 1부터 시작하므로 index로 변경
factorial /= n; // 첫 자리 기준으로는 (n-1)!로 시작
// 순열의 각 자리수에 대해 값을 결정
for (int i = 0; i < n; i++) {
int index = (int) (k / factorial); // 현재 자리의 인덱스 계산
answer[i] = people.get(index); // 해당 인덱스의 값을 결과에 저장
people.remove(index); // 사용한 숫자는 리스트에서 제거
k = k % factorial; // 다음 자리 기준으로 k를 갱신
if (n - i - 1 > 0) { // 남은 자리가 있다면
factorial /= (n - i - 1); // 다음 자리 기준 (n-i-2)!로 갱신
}
}
return answer; // 최종 k번째 순열 반환
}
}
Share article