감 ¶
단듯 는데 ;;
법 단 0~n 까 가 바로뒤 꼽고 뒤 가 맨 게 다 flip(1)로 뒤 가 맨 래 n 게다.
그 다 0~n-1 까 가고 동 동 반복고.. 렇게 고 n만 면 것부 것까 렬된다.
법 단 0~n 까 가 바로뒤 꼽고 뒤 가 맨 게 다 flip(1)로 뒤 가 맨 래 n 게다.
그 다 0~n-1 까 가고 동 동 반복고.. 렇게 고 n만 면 것부 것까 렬된다.
대부 력는것 는데 매달렸나 력부 문 구대로 못다.
러 력는 만들기 들 단 그냥 력고 결과력 는 로 다.
러 력는 만들기 들 단 그냥 력고 결과력 는 로 다.
드 ¶
~cpp //Stacks Of Flapjacks:2005.04.15 동 #include <iostream> using namespace std; class StacksOfFlapjacks{ private: int* cake; //들 int arr_size; // 개 void flip(int n){ //n다가 고 뒤! int k = (arr_size-n+1)/2; for(int i=0; i<k; i++){ swap(cake[i],cake[arr_size-n-i]); } cout << n << " "; } int searchBigIndex(int end){ //0~end index까 검 가 index리. int big_index=0; for(int i=1;i<=end;i++){ if(cake[big_index]<cake[i]) big_index = i; } return big_index; } bool isEnd(){ //모든가 렬되는 . for(int i=1;i<arr_size;i++){ if(cake[i-1]>cake[i]) return false; } cout << "0\n"; //모든 렬되므로 더 뒤게다는 0력 return true; } public: void run(int*arr, int size){ cake = arr; arr_size = size; for(int j=arr_size-1, n=1;j>=0;j--, n++){ if(isEnd()==true) break; if(searchBigIndex(j)==j) // 놓리 미 놓다면 다뒤기로. continue; if(searchBigIndex(j)!=0) //맨 면 뒤 가 다. flip(arr_size-searchBigIndex(j)); flip(n); } } }; int main(void){ StacksOfFlapjacks sof; int arr[30],j=0; while(cin >> arr[j]){ //력 끝 ^Z(EOF)를 내내 료. j++; if(j>30) break; } for(int i=0;i<j;i++) cout << arr[i] << " "; cout << "\n"; sof.run(arr,j); for(i=0;i<j;i++) cout << arr[i] << " "; return 0; }