728x90
반응형
[ 문제 2 ] 입력된 한 줄의 수식문장에서 괄호 짝의 유효성을 검사 하는프로그램을 작성하라.
• 괄호짝은{},[],()의3종류를갖는다.
• 출력은 유효하지 않으면 ‘Wrong_N’ 유효하면 ‘OK_N’를 출력한다. 여기서 N은 문장안의 괄호의 개 수이다.
※ 주의: 수식문장은 1000개의 문자를 넘지 않는다. 수식문장은 공백문자를 포함할 수 있다.
전체 코드
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000
typedef char element;
typedef struct StackNode {
element data;
struct StackNode *next;
} StackNode;
typedef struct StackType {
struct StackNode *top;
} StackType;
void init(StackType *S){
S->top = NULL;
}
int isEmpty(StackType *S){
return S->top == NULL;
}
void push(StackType *S, element e) {
StackNode *node = (StackNode *)malloc(sizeof(StackNode));
if (node == NULL) {
printf("Memory allocation failed\n");
return;
}
node->data = e;
node->next = S->top;
S->top = node; // 업데이트가 누락되어 있었습니다.
}
element pop(StackType *S){
if(isEmpty(S)) {printf("Stack is Empty"); return -1;}
StackNode *p = S->top;
element e = p->data;
S->top = p->next;
free(p);
return e;
}
element peek(StackType *S){
if(isEmpty(S)) {printf("Stack is Empty"); return -1;}
return S->top->data;
}
void print(StackType *S){
StackNode *p;
for(p=S->top ; p!=NULL; p=p->next){
printf("[%c] ->",p->data);
}
printf("NULL");
}
int check( char str[]){
StackType S;
init(&S);
char c, t;
int n = strlen(str);
for(int i=0;i<n;i++){
c = str[i];
if(c == '(' || c == '{' || c == '[') {push(&S,c);}
else if(c == ')' || c == '}' || c == ']'){
if(isEmpty(&S)) return 0;
else {
t = pop(&S);
if((t == '(' && c != ')')
|| (t == '{' && c != '}')
|| (t == '[' && c != ']')) return 0;
}
}
}
return isEmpty(&S);
}
int main(){
char str[N];
scanf("%[^\n]s", str);
int cnt = 0;
for(int i=0;i<strlen(str);i++){
char c = str[i];
if(c == '(' || c == '{' || c == '['|| c == ')'
|| c == '}' || c == ']') cnt ++;
}
if(check(str) == 1) printf("OK_%d",cnt);
else printf("Wrong_%d",cnt);
}
/*
[{}{()}]
(3+40*(2+(30-7)*2133)
3*{4+(2-792)/1} + [3*{4-2* (100 -7)}]
301*{4+(2101-7)/1} + 9*{4-2* (10108-7)}}
(3*{4001+(2-7)/1} + [3*{4-2* (1-7)}])
*/
728x90
반응형
'Datastructure > [6] 스택' 카테고리의 다른 글
[6] 스택 ⑦ 스택의 응용 : 후위수식 변환 (0) | 2024.05.19 |
---|---|
[6] 스택 ⑥ 스택의 응용 : 중위수식 변환 (0) | 2024.05.17 |
[6] 스택 ④ 스택의 응용 : 스택 ADT (0) | 2024.05.13 |
[6] 스택 ③ 연결리스트를 이용한 스택 알고리즘(ADT) (0) | 2024.05.13 |
[6] 스택 ② 배열을 이용한 스택 알고리즘(ADT) (0) | 2024.05.12 |