[Programmers] 줄 서는 방법 - 연습문제

동민·2021년 3월 11일
import java.util.ArrayList;

// 줄 서는 방법 - 연습문제
public class LineMethod {
	public int[] solution(int n, long k) {
		
		int[] answer = new int[n];
		ArrayList<Integer> list = new ArrayList<>();
		
		long fac = 1; // overflow 처리
		int index = 0;
		
		for (int i = 1; i <= n; i++) {
			fac *= i;
			list.add(i);
		}
		
		k--;
		
		while (n > 0) {
			fac /= n--;	// 1. fac / n => 2. n-- 순서로 계산 됨
			answer[index] = list.get((int) (k / fac));
			list.remove((int) (k / fac));
			k %= fac;
			index++;
		}
		return answer;
	}
}
profile
BE Developer

0개의 댓글