코딩 문제 풀이/백준
[백준] 자바 문제 풀이 1918 : 골드2
코딩하는 랄로
2023. 9. 20. 10:12
반응형
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Main {
public static boolean is_Op(char c) {
if (c == '*' || c == '/' || c == '+' || c == '-' || c == '(' || c == ')')
return true;
return false;
}
public static int compareOp(char a, char b) {
switch (a) {
case '-':
case '+':
if (b == '-' || b == '+')
return 0;
return 1;
case '*':
case '/':
if (b == '(' || b == ')')
return 1;
return 0;
}
return 1;
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
char[] s = new char[str.length()];
for (int i = 0; i < s.length; i++) {
s[i] = str.charAt(i);
}
List<Character> formula = new ArrayList<>();
Stack<Character> op_stack = new Stack<>();
for (int i = 0; i < s.length; i++) {
if (is_Op(s[i])) {
if (op_stack.isEmpty())
op_stack.add(s[i]);
else if (s[i] == ')') {
while (!op_stack.isEmpty() && op_stack.peek() != '(')
formula.add(op_stack.pop());
op_stack.pop();
} else if (compareOp(op_stack.peek(), s[i]) == 0) {
while (!op_stack.isEmpty() && op_stack.peek() != '(' && compareOp(op_stack.peek(), s[i]) == 0)
formula.add(op_stack.pop());
op_stack.add(s[i]);
} else if (compareOp(op_stack.peek(), s[i]) == 1) {
op_stack.add(s[i]);
}
} else {
formula.add(s[i]);
}
}
while (!op_stack.isEmpty())
formula.add(op_stack.pop());
for (char a : formula)
if (a != '(' && a != ')')
System.out.print(a);
}
}
반응형