728x90
*추후 수정예정
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #define SIZE 101 //IDEA //1. (,),[,],를 만날때 마다 스택에 push하거나 pop하면서 //균형잡인 문자열인지 판단한다 //2. (,),[,]를 만나면 스택에 쌓는다 //3. ),]를 만나면 스택 맨 윗 부분과 비교하여 pop해준다 //4. 짝을 이루지 않는다면 push한다. //5. 스택의 인덱스를 가르키는 top가 -1라면 스택에 데이터가 //없다는 뜻이므로 균형잡힌 문자열이다. char stack[SIZE]; int top = -1; int push(int n) { if (top >= SIZE - 1) return -1; return stack[++top] = n; } int pop() { if (top < 0) return -1; return stack[top--] = '\0'; } char peek(){ return stack[top]; } void Result(char* arr, int size) {//균형잡힌 문자열인지 판단 for (int i = 0; i < size; i++) { if (arr[i] == '(' || arr[i] == ')' || arr[i] == '[' || arr[i] == ']') { if (top == -1) { //top가 -1면 push push(arr[i]); } else { if (peek() == '(' && arr[i] == ')') { pop(); } else if (peek() == '[' && arr[i] == ']') { pop(); } else push(arr[i]); } } } if (top == -1) { printf("yes\n"); } else printf("no\n"); } int main() { char arr[SIZE]; while (1) { top = -1; //공백. 에서 정확한 판단을 위해 gets(arr); if(strcmp(arr, ".")==0) break; Result(arr, strlen(arr)); } return 0; }
728x90
'프로그래밍 > C, C++' 카테고리의 다른 글
[C] 동아리 5주차 활동 (정수의 자리수 분리) (0) | 2021.04.09 |
---|---|
[C] 정수의 자리수 분리 (0) | 2021.04.08 |
[C] 백준 2798 블랙잭 🃏 (0) | 2021.04.07 |
[C] 백준 9012 괄호 (0) | 2021.03.31 |
[C] 백준 10870 피보나치 (0) | 2021.03.22 |