한줄 후기 : 자구 때 후위수식 열심히 공부한 보람ㅋ
https://www.acmicpc.net/problem/1918
전형적인 스택 문제
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 101
int push(char data);
int pop();
int pre(char data);
char arr[MAX_SIZE];
char stack[MAX_SIZE];
int top = -1;
int main(){
int pos=0;
char data, ch;
scanf("%s", arr);
while((data = arr[pos++] )!= '\0'){
if(data >= 'A' && data <='Z') printf("%c", data);
else if(data == '(') push(data);
else if(data == ')'){
while((ch = pop()) != '(') printf("%c", ch);
}
else{
while((pre(data) <= pre(stack[top])) && top != -1){
printf("%c", pop());
}
push(data);
}
}
while(top != -1){
printf("%c", pop());
}
return 0;
}
int push(char data){
stack[++top] = data;
}
int pop(){
return stack[top--];
}
int pre(char data){
if(data == '(') return 0;
else if(data == '+' || data=='-') return 1;
else if(data =='*'|| data=='/') return 2;
}
참고로 if(data >= 'A' && data <= 'Z') 안쓰고 ctype.h 선언 후 isalnum 함수 써도 된다.
'DEV > PS' 카테고리의 다른 글
[1158] 조세퍼스 문제, C++ (0) | 2019.07.22 |
---|---|
[1543] 문서 검색, C (0) | 2019.07.20 |
[9933] 민균이의 비밀번호, C (0) | 2019.07.20 |
[15953] 상금 헌터, C (0) | 2019.07.15 |
[13163] 닉네임에 갓 붙이기, C (0) | 2019.07.15 |