한줄 후기 : 자구 때 후위수식 열심히 공부한 보람ㅋ
https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식은 주어지지 않는다. 표기식은 알파벳 대문자와 +, -, *, /, (, )로만 이루어져 있으며, 길이는 100을 넘지 않는다.
www.acmicpc.net
전형적인 스택 문제
#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 |