소ê°� ¶
ê°„ë‹¨í• ë“¯ 하여 ë�„ì „í–ˆëŠ”ë�° ì—시;;
해법ì�€ ì�¼ë‹¨ 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;
}










