ㅋㅋㅋㅌㅋㅌ갸많이 틀림,,,^^ 캬ㅑ캌캬
오래전에 풀었던거라 기억은 잘 안 나즤만서도~
복습 차원에서 한 번 끄적여 봅니다
<기본적인(?) 개념>
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; *x = 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 |
ㅜㅡㅠㅜㅡㅜㅠ휴ㅜㅠㅜ
'백준' 카테고리의 다른 글
백준 알고리즘 2750번 수 정렬하기 (0) | 2019.01.30 |
---|---|
백준 알고리즘 10845번 큐 (0) | 2019.01.26 |
백준 알고리즘 1011번 Fly me to the Alpha Centauri (0) | 2019.01.26 |
백준 알고리즘 1991번 트리순회 (0) | 2019.01.08 |
백준 알고리즘 10828번 스택 (0) | 2019.01.07 |