[문제풀이] 5397번: 키로거
문제유형
연결리스트
Solution
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #include <cstdio> struct NODE { char ch; struct NODE* next; struct NODE* prev; }; NODE HEAD; NODE TAIL; NODE* head = &HEAD; NODE* tail = &TAIL; NODE* cur = &HEAD; int T; char str[1000000]; void init() { HEAD.ch = -1; HEAD.next = NULL; HEAD.prev = NULL; TAIL = HEAD; head = &HEAD; head->next = tail; tail = &TAIL; tail->prev = head; cur = head; for (register int i = 0; str[i] != 0; i++) str[i] = 0; } void insertNode(char ch) { NODE* p = new NODE; p->ch = ch; p->next = cur->next; p->prev = cur; cur->next->prev = p; cur->next = p; cur = cur->next; } void deleteNode() { NODE* del = cur; if (cur == &HEAD) return; cur->prev->next = cur->next; cur->next->prev = cur->prev; cur = cur->prev; delete del; } void curToRight() { if (cur->next->next == NULL) return; cur = cur->next; } void curToLeft() { if (cur->prev == NULL) return; cur = cur->prev; } void print() { head = head->next; for (;;) { if (head == tail) return; printf("%c", head->ch); head = head->next; } } void solve(char* str) { do { if (*str == '-') { deleteNode(); } else if (*str == '<') { curToLeft(); } else if (*str == '>') { curToRight(); } else { insertNode(*str); } str++; } while (*str != '\0'); } int main() { scanf("%d", &T); while (T--) { init(); scanf("%s", str); solve(str); print(); printf("\n"); } return 0; } | cs |
'한국으로 > 알고리즘 문제풀이' 카테고리의 다른 글
[문제풀이] 3967번: 매직 스타 (0) | 2018.07.05 |
---|---|
[문제풀이] 6549번: 히스토그램에서 가장 큰 직사각형 (0) | 2018.07.05 |
[문제풀이] 2512번: 예산 (0) | 2018.07.05 |
[문제풀이] 2424번: 부산의 해적 (0) | 2018.07.05 |
[문제풀이] 1620번: 나는야 포켓몬 마스터 이다솜 (0) | 2018.07.05 |
[문제풀이] 1406번: 에디터 (0) | 2018.07.05 |
[문제풀이] 2776번: 암기왕 (0) | 2018.07.04 |
[문제풀이] 1966번: 프린터 큐 (0) | 2018.07.04 |