N명이 줄을 서는 모든 가짓 수 중에서 정답을 만족하는 경우를 출력했다.
N명이 줄을 서는 경우의 수 = O(N!)
매 번 조건에 만족하는 지 확인 = O(N)
next_permutation 을 썼다.
#include <bits/stdc++.h>
using namespace std;
bool isRight(int p[], int fr[], const int& n){
int i, j;
for(i=0; i<n; ++i){
int front = 0;
for(j=i-1; j>=0; --j) front += p[i] < p[j];
if(front != fr[p[i]-1]) return false;
}
return true;
}
int main(){
int i, p[10], n, fr[10];
scanf("%d", &n);
for(i=0; i<n; ++i){
scanf("%d", &fr[i]);
p[i] = i+1;
}
while( ! isRight(p, fr, n) ) std::next_permutation(p, p+n);
for(i=0; i<n; ++i) printf("%d ", p[i]);
return 0;
}
댓글 없음:
댓글 쓰기