U E D R , A S I H C RSS

Stacks Of Flapjacks/이동현

는데 ;;
단 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;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:06
Processing time 0.0082 sec