반응형
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
char data;
struct Node *next;
} Node;
typedef struct {
int count;
Node *top;
} Stack;
void push(Stack *stack) {
Node *node = (Node*)malloc(sizeof(Node));
node->data = '(';
node->next = stack->top;
stack->top = node;
stack->count++;
}
void pop(Stack *stack) {
if(stack->top == NULL) {
stack->count = -999;
return;
}
Node *node = stack->top;
if(node->data == '(') {
stack->top = node->next;
free(node);
stack->count--;
} else {
stack->count = -999;
}
}
int main() {
int T;
scanf("%d", &T);
for(int i = 0; i < T; i++) {
Stack s;
s.top = NULL;
s.count = 0;
char p[52];
scanf("%s", p);
for(int j = 0; j < (int)strlen(p); j++) {
if(p[j] == '(') {
push(&s);
} else {
pop(&s);
}
}
if(s.count == 0) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
연결리스트로 처리한 괄호문제.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int top = 0;
void push() {
top++;
}
void pop() {
if(top == 0) {
top = -999;
return;
}
top--;
}
int main() {
int T;
scanf("%d", &T);
for(int i = 0; i < T; i++) {
top = 0;
char p[51];
scanf("%s", p);
for(int j = 0; j < (int)strlen(p); j++) {
if(p[j] == '(') {
push();
} else {
pop();
}
}
if(top == 0) {
printf("YES\n");
} else {
printf("NO\n");
}
}
}
스택의 개념을 활용하여 문자 (가 들어오면 top++ )가 들어오면 top--하는 식으로
마지막에 top의 결과가 0일때만 "YES"를 출력
반응형
'BaekJoon > C++' 카테고리의 다른 글
11866 : 요세푸스 문제 (C) (0) | 2021.01.10 |
---|---|
10845 : 큐 (C) (0) | 2021.01.10 |
10828 : 스택 (C) (0) | 2021.01.09 |
10870 : 피보나치 수 5 (C++) (0) | 2020.12.21 |
10872 : 팩토리얼 (C++) (0) | 2020.12.20 |
댓글