이번 문제는 Greedy 알고리즘을 활용하여 해결하였다. 우선 규칙을 찾아보는 것이 중요했다.
#include <iostream>
#include <cstring>
#define MAX 4243
using namespace std;
int n, k;
int v[MAX];
bool visited[MAX];
void Input(){
cin>>n>>k;
memset(v, 0, sizeof(v));
memset(visited, false, sizeof(visited));
}
void Solution(){
int end=n;
int idx=1;
while(k){
if(k>=end-1){
k-=(end-1);
v[idx]=end;
idx++;
visited[end]=true;
}
end--;
}
int num=1;
for(int i=1; i<=n; i++){
if(v[i]!=0) continue;
while(visited[num])
num++;
v[i]=num++;
}
}
void Solve(){
for(int i=1; i<=n; i++){
cout<<v[i]<<" ";
}
cout<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
Solution();
Solve();
return 0;
}