Algorithm

[C์–ธ์–ด] Stack ์Šคํƒ - ํ›„์œ„ํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ postfix / ๋ฌธ์ž์—ด ์ˆซ์ž ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

say! 2023. 1. 11. 14:27
728x90

๐Ÿ”ตํ›„์œ„ํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ ์กฐ๊ฑด

  1. ํ”ผ์—ฐ์‚ฐ์ž๋งŒ ์Šคํƒ์— push
  2. ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ
    1. ํ”ผ์—ฐ์‚ฐ์ž 2๊ฐœ pop > ๊ณ„์‚ฐ > ๊ณ„์‚ฐ ๊ฒฐ๊ณผ push
  3. ์Šคํƒ์— ๋‚จ์•„์žˆ๋Š” ํ”ผ์—ฐ์‚ฐ์ž pop > ์ด ๊ฒฐ๊ณผ

 

๐ŸŸกํ›„์œ„ํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ ์ฝ”๋“œ

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100

typedef int element;
typedef struct {
	int top;
	element data[MAX_SIZE];
} StackType;

void init(StackType* s) {
	s->top = -1;
}

int is_full(StackType *s) {
	return s->top == MAX_SIZE - 1;
}

int is_empty(StackType* s) {
	return s->top == -1;
}

void push(StackType* s, element c) {
	if (is_full(s)) {
		printf("์Šคํƒ์ด ๊ฐ€๋“์ฐผ์Šต๋‹ˆ๋‹ค.\n");
		return;
	}
	else {
		s->data[++(s->top)] = c;
	}
}

char pop(StackType* s) {
	if (is_empty(s)) {
		printf("์Šคํƒ์ด ๋น„์—ˆ์Šต๋‹ˆ๋‹ค.\n");
		return;
	}
	else {
		return s->data[(s->top)--];
	}
}

char peek(StackType* s) {
	return s->data[(s->top)];
}

// ํ›„๊ธฐํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ
int eval(char exp[]) {
	int n = strlen(exp);
	int op1, op2;
	char c;
	StackType s;
	init(&s);

	for (int i = 0; i < n; i++) {
		c = exp[i];

		if (c == '*' || c == '+' || c == '-' || c == '/') {	// ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ
			op2 = pop(&s);
			op1 = pop(&s);

			switch (c) {
			case '*': push(&s, op1 * op2); break;
			case '+': push(&s, op1 + op2); break;
			case '-': push(&s, op1 - op2); break;
			case '/': push(&s, op1 / op2); break;
			}
		}
		else{
			push(&s, c - '0');
		}
	}

	return pop(&s);	// ์Šคํƒ์— ๋‚จ์•„์žˆ๋Š” ๊ฒฐ๊ณผ๊ฐ’ pop
}

int main() {
	int result;
	result = eval("82/3-32*+");
	printf("ํ›„๊ธฐํ‘œ๊ธฐ์‹ ๊ณ„์‚ฐ๊ฐ’ %d\n", result);
	return 0;
}

 

๐Ÿ”ต ๋ฌธ์ž์—ด ์ˆซ์ž ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

- atoi() ํ•จ์ˆ˜ ์ด์šฉํ•˜๊ธฐ

char c = "123";
int i = atoi(c);
printf("%d\n", i);	// ์ •์ˆ˜ํ˜• 123

- ์•„์Šคํ‚ค์ฝ”๋“œ ์ด์šฉํ•˜๊ธฐ

char c = "123";
int i = c - '0';
printf("%d\n", i);	// ์ •์ˆ˜ํ˜• 123

๋ฌธ์ž 0์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๋Š” 48, ๋ฌธ์ž 1์˜ ์•„์Šคํ‚ค์ฝ”๋“œ๋Š” 49

> '1' - '0' ์€ 1์ด ๋จ

 

- ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ

 

C์—์„œ ์ •์ˆ˜๋ฅผ Char๋กœ ๋ณ€ํ™˜

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์ •์ˆ˜๋ฅผ C ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

www.delftstack.com