티스토리 뷰
제가 포스팅한 stack 괄호검사 응용편 활용하면 될 것 같아요. http://tiger1710.tistory.com/4
밑에는 제가 사용한 소스 코드에요!
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 | #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> typedef struct stack { char data; struct stack *next; }Stack; typedef struct stackList { Stack *top; }sList; void initStack(sList *list) { list->top = NULL; } void push(sList *list, char data) { Stack *new = (Stack*)malloc(sizeof(Stack)); new->data = data; new->next = list->top; list->top = new; } char peek(sList *list) { return list->top->data; } void pop(sList *list) { Stack *temp = list->top->next; free(list->top); list->top = temp; } bool isEmpty(sList *list) { if (list->top == NULL) return true; else return false; } bool brackets(char word[], sList *list) { for (int i = 0; i < strlen(word); i++) { if (word[i] == '(' || word[i] == '{' || word[i] =='[') { push(list, *(word + i)); } else { if (!isEmpty(list)) { switch (word[i]) { case ')': if (peek(list) == '(') { pop(list); break; } else return false; case '}': if (peek(list) == '{') { pop(list); break; } else return false; case ']': if (peek(list) == '[') { pop(list); break; } else return false; default: break; } } else return false; } } if (!isEmpty(list)) return false; else return true; } int main(void) { sList list1; initStack(&list1); char a[51]; int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%s", a); if (brackets(a, &list1)) puts("YES"); else puts("NO"); while (!isEmpty(&list1)) { //검사를 다했다면 스택을 비워줍니다. pop(&list1); } } return 0; } | cs |
'Coding > acmicpc' 카테고리의 다른 글
백준 10451:순열 사이클 (0) | 2018.02.28 |
---|---|
백준 2583:영역 구하기 (0) | 2018.02.27 |
백준 2606:바이러스 (0) | 2018.02.23 |
백준 10026:적록색약 (0) | 2018.02.23 |
백준 11724번:연결 요소의 갯수 (0) | 2018.02.23 |