문제설명
소스코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Stack;
public class Main
{
public static void main(String[] args) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Double> operand = new Stack<>();
HashMap<Character, Integer> hash = new HashMap<>();
int N = Integer.parseInt(br.readLine());
String input = br.readLine();
for(int i = 0; i < N; ++i) //A~Z까지 알파벳을 피연산자와 매핑시킴
{
char tmp = 'A';
tmp += i;
hash.put(tmp, Integer.parseInt(br.readLine()));
}
for(int i = 0; i < input.length(); ++i)
{
if(input.charAt(i) == '+' || input.charAt(i) == '-' || input.charAt(i) == '*' || input.charAt(i) == '/')
{
double A = operand.pop();
double B = operand.pop();
if(input.charAt(i) == '+') operand.push(B + A);
else if(input.charAt(i) == '-') operand.push(B - A);
else if(input.charAt(i) == '*') operand.push(B * A);
else if(input.charAt(i) == '/') operand.push(B / A);
}
else operand.push((double)hash.get(input.charAt(i)));
}
System.out.printf("%.2f", (double)operand.pop());
}
}
설명
수식의 중위 표기법과 후위 표기법
후위 표기식을 계산하는 알고리즘
- 입력의 두 번째 줄에 주어지는 알파벳과 3번째 줄부터 주어지는 피연산자들의 매핑 관계를 만들기 위해 해시테이블을 사용하였다.
- 부동 소수점의 부정확성 때문에 float말고 double을 사용해야 한다.
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[Java] 백준 1673번 문제 (치킨 쿠폰) (0) | 2023.10.19 |
---|---|
[Java] 백준 1918번 문제 (후위 표기식) (0) | 2023.10.18 |
[Java] 백준 11869번 문제 (님블) (1) | 2023.10.05 |
[Java] 백준 11868번 문제 (님 게임2) (1) | 2023.10.05 |
[Java] 백준 1252번 문제 (이진수 덧셈) (0) | 2023.10.03 |