2023-02-01 23:44:34 +09:00
// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/12936
2023-02-01 23:55:46 +09:00
import java.util.ArrayList ;
2023-02-01 23:44:34 +09:00
class Solution {
public int [] solution ( int n , long k ) {
2023-02-01 23:55:46 +09:00
ArrayList < Integer > al = new ArrayList <> ();
int [] answer = new int [ n ] ;
2023-02-01 23:44:34 +09:00
int pos , len = n ;
long div , tmp , fact = 1 ;
for ( int f = n ; f >= 2 ; f -- ) fact *= f ;
2023-02-01 23:55:46 +09:00
for ( int a = 1 ; a <= len ; a ++ ) al . add ( a );
for ( int a = 0 ; a < len ; div = fact / n , pos = ( int )(( k - 1 ) / div ), answer [ a ] = al . remove ( pos ), k -= pos * div , fact /= n , n -- , a ++ ) continue ; // 별 의미는 없지만 이런 식으로 안의 내용을 for 괄호 내에 다 때려박아서 줄일수 있다.
return answer ;
2023-02-01 23:44:34 +09:00
}
}