Colored By Color Scripter™
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | #include <stdio.h> #include <stack> #pragma warning(disable:4996) using namespace std; stack<char> washing; char dish[32]; int flag, cnt_all, cnt_answer, cnt_dish, start_alpha; int answer[1000000]; void algo(int dishnum, int alpha); // 다음 결과 접시; int main() { for (int i = 1; i <= 31; i++) { scanf("%c", &dish[i]); if (dish[i] == '\n') { cnt_all = i - 1; break; } } start_alpha = 97; // a washing.push(start_alpha); answer[++cnt_answer] = 2; // push는 2 cnt_all--; algo(cnt_dish + 1, start_alpha); if (!flag) { for (int i = 1; i <= 1000000; i++) { if (!answer[i]) break; if (answer[i] == 1) printf("pop\n"); else if (answer[i] == 2) printf("push\n"); } } return 0; } void algo(int dishnum, int alpha) // 나오는 접시 / alpha 들어가는 접시 { if (dish[dishnum] == '\n') return; if ((washing.empty()) || (dish[dishnum] != washing.top() && cnt_all != 0)) { answer[++cnt_answer] = 2; // push는 2 washing.push(alpha + 1); // 다음 스펠링 푸쉬 cnt_all--; algo(dishnum, (alpha + 1)); // 아직 못 찾았기 때문에 다음 순서 알파벳으로 넘어가지 않는다. } else if ((dish[dishnum] == washing.top())) { answer[++cnt_answer] = 1; // pop은 1 washing.pop(); algo(dishnum + 1, alpha); } else { printf("impossible\n"); flag = 1; return; } } |