BOJ 1918 후위표기식

https://www.acmicpc.net/problem/1918

구조체로 스택을 만들고 다시 해보았습니다.(.cpp에서 돌려야합니다.)

설명은 이전의 글을 참조해주세요.

  #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 10000

typedef struct stack {
char s[MAX_SIZE];
int size;

stack() {
size = 0;
}

int empty() {
if (size) return 0;
else return 1;
}

void push(char c) {
s[size] = c;
size++;
}

void pop() {
if (!empty()) {
size--;
}
}

char top() {
return s[size - 1];
}
}stack;


char* getPostOrder(char* str) {
int len = strlen(str);
char* ret = (char*)malloc(sizeof(char) * (len + 1));
int retIdx = 0;

stack s;

for (int i = 0; i < len; i++) {
if (str[i] == '+' || str[i] == '-') {
while (!s.empty() && s.top() != '(') {
ret[retIdx++] = s.top();
s.pop();
}
s.push(str[i]);
}
else if (str[i] == '*' || str[i] == '/') {
while (!s.empty() && (s.top() == '*' || s.top() == '/')) {
ret[retIdx++] = s.top();
s.pop();
}
s.push(str[i]);
}
else if (str[i] == '(') {
s.push(str[i]);
}
else if (str[i] == ')') {
while (s.top() != '(') {
ret[retIdx++] = s.top();
s.pop();
}
s.pop();
}
else if (str[i] >= 'A' && str[i] <= 'Z') {
ret[retIdx++] = str[i];
}
}

while (!s.empty()) {
ret[retIdx++] = s.top();
s.pop();
}

ret[retIdx] = '\0';

return ret;
}

int main() {
char str[MAX_SIZE];
scanf("%s", str);

char *ret = getPostOrder(str);
printf("%s", ret);

free(ret);

return 0;
}

'CS기본지식 > 자료구조' 카테고리의 다른 글

[C언어] 원형 큐(라운드 큐)  (0) 2017.09.07
[C언어] 우선순위 큐(Priority Queue)  (3) 2017.09.07
[2263] 트리의 순회  (1) 2017.08.27
스택 계산기  (0) 2017.06.13
[1918] 후위표기식  (2) 2017.06.13

+ Recent posts