¶
듯 는데 ;;
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;
}










