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 |