ㅋㅋㅋㅌㅋㅌ갸많이 틀림,,,^^ 캬ㅑ캌캬

오래전에 풀었던거라 기억은 잘 안 나즤만서도~

복습 차원에서 한 번 끄적여 봅니다



<기본적인(?) 개념>

1. '(' 일때에는 push를, ')' 일때에는 pop를 한다.

2. 스택이 비어있을 때 pop을 하게 되면 NO를 출력한다.

3. 스택이 비어있지 않았을 때 문자열에 저장된 괄호 확인(?)이 끝나면 NO를 출력한다.

4. 스택이 비어있고, 문자열에 저장된 괄호 확인이 끝나면  YES를 출력한다.


코드 설명은 주석으로 달아 놓았습니당~!

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10000
 
typedef struct {
    int    max;     //스택 배열의 최대 크기
    char *stk;     //스택 표현할 배열
    int ptr;     //현재 위치
}Stack;
 
int initialize(Stack* s, int max) {
    s->ptr = 0;
    if ((s->stk = (char*)calloc(max, sizeof(char))) == NULL) {
        s->max = 0;
        return -1;
    }
    s->max = max;
    return 0;
}
 
int push(Stack* s, char x) {
    if (s->ptr >= s->max) //스택이 가득 차 있을 때
        return -1;
    s->stk[s->ptr++= x;
    return 0;
}
 
int pop(Stack* s, char *x) {
    if (s->ptr <= 0//스택이 비어있을 때
        return -1;
    *= s->stk[--s->ptr];
    return *x;
}
 
int empty(Stack* s) { //스택이 비어있으면 1, 아니면 0
    if (s->ptr <= 0//스택이 비어있을 때
        return 1;
    return 0;
}
 
int main(void) {
    Stack s;
    int num = 0, str;
    char ans2[50]= " ";
    //가장 먼저 숫자를 입력 받는다.
    scanf("%d"&num);
 
    //입력받은 숫자(num)만큼 반복
    while (num > 0) {
        //스택 초기화
        initialize(&s, MAX);
        //괄호 문자열을 입력받고 str에 문자열의 길이를 저장한다.
        scanf("%s", ans2);
        str = strlen(ans2);
        
        //입력받은 괄호 문자열을 처음부터 문자열 길이만큼 반복한다.
        for (int i = 0; i < str; i++) {
            //'('일 때, 스택에 push한다.
            if (ans2[i] == '(') {
                push(&s, ans2[i]);
            }
            //')'일 때, 스택이 비어있으면 NO를 출력
            else if (ans2[i] == ')') {
                if (empty(&s) == 1) {
                    printf("NO\n");
                    break;
                }
                //비어있지 않으면 pop한다.
                else
                    pop(&s, &ans2[i]);
            }
            
            //만약 문자열의 마지막 문자일 때,
            if (i == str - 1) {
                //비어있으면 YES를 출력, 비어있지 않으면 NO를 출력한다.
                if (empty(&s) == 1)
                    printf("YES\n");
                else
                    printf("NO\n");
            }
        }
        num--;
    }
    return 0;
}
cs



ㅜㅡㅠㅜㅡㅜㅠ휴ㅜㅠㅜ

+ Recent posts