프로그래밍/C, C++

[C] 백준 4949 균형잡힌세상 ⚖

pxatd 2021. 4. 8. 14:42
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