import java.util.*;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("수식을 입력하세요: ");
String input = sc.nextLine();
double result = evaluate(input);
System.out.println("결과: " + result);
}
public static double evaluate(String expression) {
Stack<Double> numbers = new Stack<>();
Stack<Character> operators = new Stack<>();
int len = expression.length();
for (int i = 0; i < len; i++) {
char ch = expression.charAt(i);
if (Character.isDigit(ch)) {
double num = ch - '0';
while (i + 1 < len && Character.isDigit(expression.charAt(i + 1))) {
num = num * 10 + (expression.charAt(i + 1) - '0');
i++;
}
numbers.push(num);
} else if (ch == '(') {
operators.push(ch);
} else if (ch == ')') {
while (operators.peek() != '(') {
double result = applyOperation(operators.pop(), numbers.pop(), numbers.pop());
numbers.push(result);
}
operators.pop();
} else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') {
while (!operators.isEmpty() && hasPrecedence(ch, operators.peek())) {
double result = applyOperation(operators.pop(), numbers.pop(), numbers.pop());
numbers.push(result);
}
operators.push(ch);
}
}
while (!operators.isEmpty()) {
double result = applyOperation(operators.pop(), numbers.pop(), numbers.pop());
numbers.push(result);
}
return numbers.pop();
}
public static double applyOperation(char operator, double b, double a) {
switch (operator) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if (b == 0) {
throw new UnsupportedOperationException("Cannot divide by zero");
}
return a / b;
}
return 0;
}
public static boolean hasPrecedence(char op1, char op2) {
if (op2 == '(' || op2 == ')') {
return false;
}
if ((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-')) {
return false;
}
return true;
}
}
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class StringTransformation {
public static void main(String[] args) {
// 사용자로부터 문자열을 입력받습니다.
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력해 주세요 : ");
String input = scanner.nextLine();
// 변환된 문자열을 계산합니다.
String transformedString = transformString(input);
// 변환된 문자열을 출력합니다.
System.out.println("변경된 문자열입니다 : " + transformedString);
}
public static String transformString(String input) {
Queue<Character> queue = new LinkedList<>();
StringBuilder output = new StringBuilder();
// 문자열의 각 문자를 큐에 넣습니다.
for (char c : input.toCharArray()) {
queue.offer(c);
}
// 큐가 비어있지 않은 동안 규칙에 따라 문자를 변환합니다.
while (!queue.isEmpty()) {
output.append(queue.poll()); // 큐에서 문자를 하나 꺼내 출력
// 큐가 비어있지 않다면, 그다음 문자를 큐에서 꺼내서 큐의 뒤로 다시 넣습니다.
if (!queue.isEmpty()) {
queue.offer(queue.poll());
}
}
return output.toString();
}
}