본문 바로가기
Computer Science

A 기 실 괄호짝짓기 / 스택

by OKOK 2018. 12. 13.

1. 보면 스택 사용해서

2. 괄호 문제 풀이

3. 전형적인 스택 풀이 문제 


1. 아래는 큐마님 코드

2. 깔끔...

3. 스택 없이도

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
#include <stdio.h>
 
char str[300];
char stack[300];
int top;
 
int main(int argc, char** argv) {
    freopen("input.txt""r", stdin);
    int N, ans;
    for (int t = 0; t < 10; t++) {
        scanf("%d"&N);
        scanf("%s"&str);
 
        ans = 1;
        top = 0;
        for (int i = 0; i < N; i++) {
            if (str[i] == '(' || str[i] == '[' || str[i] == '{' || str[i] == '<')
                stack[top++= str[i];
            else {
                if (top <= 0) {
                    ans = 0;
                    break;
                }
                else if (str[i] == ')') {
                    if (stack[top - 1!= '(') {
                        ans = 0;
                        break;
                    }
                    else top--;
                }
                else if (str[i] == ']') {
                    if (stack[top - 1!= '[') {
                        ans = 0;
                        break;
                    }
                    else top--;
                }
                else if (str[i] == '}') {
                    if (stack[top - 1!= '{') {
                        ans = 0;
                        break;
                    }
                    else top--;
                }
                else if (str[i] == '>') {
                    if (stack[top - 1!= '<') {
                        ans = 0;
                        break;
                    }
                    else top--;
                }
            }
        }
 
        if (top == 0 && ans) printf("#%d %d\n", t + 1, ans);
        else printf("#%d 0\n", t + 1);
    }
    return 0;
}
 
cs


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
#include <stdio.h>
 
#define MAXLEN 300
 
int main(void)
{
    int T;
 
    char braketstring[MAXLEN];
 
 
    freopen("input.txt""r", stdin);
 
    for (int i = 1; i < 11; i++)
    {
        int braket1, braket2, braket3, braket4;
        braket1 = braket2 = braket3 = braket4 = 0;
 
        scanf("%d%s"&T, braketstring);
 
        //printf("%s", braket);
 
 
        // 문자열 길이 T만큼
        for (int j = 0; j < T; j++)
        {
            switch (braketstring[j])
            {
            case '(':
                braket1++;
                break;
 
            case ')':
                braket1--;
                break;
 
            case '[':
                braket2++;
                break;
 
            case ']':
                braket2--;
                break;
 
            case '{':
                braket3++;
                break;
 
            case '}':
                braket3--;
                break;
 
            case '<':
                braket4++;
                break;
 
            case '>':
                braket4--;
                break;
 
 
            default:
                break;
            }
        }
        // 괄호가 -1이면
        if (braket1 != 0 ||
            braket2 != 0 ||
            braket3 != 0 ||
            braket4 != 0)
        {
            printf("#%d %d\n", i, 0);
        }
        else
        {
            printf("#%d %d\n", i, 1);
        }
    }
    return 0;
}
 
cs


'Computer Science' 카테고리의 다른 글

A기실 계산기1 / 스택  (0) 2018.12.13
A 실 기 길찾기 / DFS  (0) 2018.12.13
A 기 실 거듭 제곱 / 재귀  (0) 2018.12.13
APS 기 실 회문2 / string  (0) 2018.12.13
APS 기 실 회문1 / string  (0) 2018.12.13

댓글