4949

Run Settings
LanguageC
Language Version
Run Command
#include <stdio.h> #include <stdlib.h> //#include <string.h> typedef struct Node //노드 정의 { int data; struct Node *next; }Node; typedef struct Stack //Stack 구조체 정의 { Node *top; //맨 앞 노드(가장 최근에 생성한 노드) }Stack; void InitStack(Stack *stack);//스택 초기화 int IsEmpty(Stack *stack); //스택이 비었는지 확인 void Push(Stack *stack, int data); //스택에 보관 int Pop(Stack *stack); //스택에서 꺼냄 int main(void) { char str[100]; Stack stack; int fail = 0; int first = 1; InitStack(&stack); while(gets(str)){ //printf("\nScript: %s\n", str); for(int i=0; i<100; i++){ if(str[i]=='.'){ //printf("find .\n"); //printf(">find . isEmpty: %d, fail: %d, i=%d\n", IsEmpty(&stack), fail, i); if(!first){ printf("\n"); }else { first = 0; } if(i==0){ //printf("End Function"); return 0; } if(IsEmpty(&stack) && fail==0){ printf("yes"); }else { printf("no"); } InitStack(&stack); fail = 0; break; }else if(str[i]=='('){ //printf(">find ( i=%d\n", i); Push(&stack, 1); }else if(str[i]==')'){ //printf(">find ) i=%d\n", i); if(IsEmpty(&stack)||Pop(&stack) != 1){ fail = 1; } }else if(str[i]=='['){ //printf(">find [ i=%d\n", i); Push(&stack, 2); }else if(str[i]==']'){ //printf(">find ] i=%d\n", i); if(IsEmpty(&stack)||Pop(&stack) != 2){ fail = 1; } } } } return 0; } void InitStack(Stack *stack) { stack->top = NULL; //스택 초기화에서는 top을 NULL로 설정 while(!IsEmpty(stack)){ Pop(stack); } } int IsEmpty(Stack *stack) { return stack->top == NULL; //top이 NULL이면 빈 상태 } void Push(Stack *stack, int data) { Node *now = (Node *)malloc(sizeof(Node)); //노드 생성 now->data = data;//데이터 설정 now->next = stack->top;//now의 next링크를 현재 top으로 설정 stack->top = now; //스택의 맨 앞은 now로 설정 } int Pop(Stack *stack) { Node *now; int re; if (IsEmpty(stack)) { return 0; } now = stack->top;//now를 top으로 설정 re = now->data;//꺼낼 값은 now의 data로 설정 stack->top = now->next;//top을 now의 next로 설정 free(now);//필요없으니 메모리 해제 return re; }
Editor Settings
Theme
Key bindings
Full width
Lines