Coding_Test 연습/Programmers
[프로그래머스] (C++) LV2 줄 서는 방법
Codetesing
2022. 6. 10. 11:53
기본적인 순열과 조합문제이다.
몫과 나머지, 순열에 따라 순서가 정해진다.
#include <string>
#include <vector>
using namespace std;
long long facto(long long num) {
long long n = 1;
for (int i = 2; i <= num; i++)
n *= i;
return n;
}
vector<int> solution(int n, long long k) {
vector<int> answer, vt;
for (int i = 1; i <= n; i++)
vt.push_back(i);
if (k == 1)
return vt;
k--;
long long pre = facto(n);
long long mod, div;
while (vt.size() != 1) {
pre /= n;
mod = k % pre;
div = k / pre;
answer.push_back(vt[div]);
vt.erase(vt.begin() + div);
k = mod;
n--;
}
answer.push_back(vt[0]);
return answer;
}