티스토리 뷰

Coding/acmicpc

백준 9012번:괄호

이끼대백과 2018. 2. 23. 12:58

제가 포스팅한 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 == NULLreturn 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
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/01   »
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
글 보관함