[문제풀이] 1406번: 에디터
문제유형
연결리스트
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 | #include <cstdio> struct NODE { char ch; NODE* next; NODE* prev; }; NODE HEAD; NODE TAIL; NODE* cur; char str[100001]; void init() { HEAD.next = &TAIL; HEAD.prev = NULL; TAIL.next = NULL; TAIL.prev = &HEAD; cur = &TAIL; } void insertNode(char ch) { NODE* p = new NODE; p->ch = ch; p->next = cur; p->prev = cur->prev; cur->prev->next = p; cur->prev = p; } void deleteNode() { NODE* del = cur->prev; if (del == &HEAD) return; cur->prev->prev->next = cur; cur->prev = cur->prev->prev; delete del; } void curLeft() { if (cur->prev->prev == NULL) return; cur = cur->prev; } void curRight() { if (cur->next == NULL) return; cur = cur->next; } void print() { NODE* head = &HEAD; head = head->next; for (;;) { if (head->next == NULL) break; printf("%c", head->ch); head = head->next; } } int main() { int i; int N = 0; char ch = 0; init(); scanf("%s", str); for (i = 0; str[i] != 0; i++) { insertNode(str[i]); } scanf("%d", &N); for (i = 0; i < N; i++) { scanf(" %c", &ch); if (ch == 'L') { curLeft(); } else if (ch == 'D') { curRight(); } else if (ch == 'B') { deleteNode(); } else if (ch == 'P') { scanf(" %c", &ch); insertNode(ch); } } print(); printf("\n"); return 0; } | cs |
'한국으로 > 알고리즘 문제풀이' 카테고리의 다른 글
[문제풀이] 6549번: 히스토그램에서 가장 큰 직사각형 (0) | 2018.07.05 |
---|---|
[문제풀이] 2512번: 예산 (0) | 2018.07.05 |
[문제풀이] 2424번: 부산의 해적 (0) | 2018.07.05 |
[문제풀이] 1620번: 나는야 포켓몬 마스터 이다솜 (0) | 2018.07.05 |
[문제풀이] 2776번: 암기왕 (0) | 2018.07.04 |
[문제풀이] 1966번: 프린터 큐 (0) | 2018.07.04 |
[문제풀이] 5926번: Cow Lineup (0) | 2018.07.04 |
[문제풀이] 1395번: 스위치 (0) | 2018.07.04 |