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; }
댓글 없음:
댓글 쓰기