Skip to content

Commit 41e910e

Browse files
committed
[Silver III] Title: 후위 표기식2, Time: 108 ms, Memory: 14596 KB -BaekjoonHub
1 parent 2174899 commit 41e910e

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# [Silver III] 후위 표기식2 - 1935
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1935)
4+
5+
### 성능 요약
6+
7+
메모리: 14596 KB, 시간: 108 ms
8+
9+
### 분류
10+
11+
자료 구조, 스택
12+
13+
### 제출 일자
14+
15+
2025년 12월 19일 11:56:44
16+
17+
### 문제 설명
18+
19+
<p>후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.</p>
20+
21+
### 입력
22+
23+
<p>첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. 3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 100보다 작거나 같은 자연수이다.</p>
24+
25+
<p>후위 표기식을 앞에서부터 계산했을 때, 식의 결과와 중간 결과가 -20억보다 크거나 같고, 20억보다 작거나 같은 입력만 주어진다.</p>
26+
27+
### 출력
28+
29+
<p>계산 결과를 소숫점 둘째 자리까지 출력한다.</p>
30+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
public static void main(String[] args) throws Exception {
6+
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
9+
int N = Integer.parseInt(br.readLine());
10+
11+
String input = br.readLine();
12+
13+
double[] arr = new double[N+1];
14+
for(int i =0; i<N; i++) {
15+
arr[i] = Double.parseDouble(br.readLine());
16+
}
17+
Stack<Double> stack = new Stack<>();
18+
19+
for(int i =0; i< input.length(); i++) {
20+
Character c = input.charAt(i);
21+
if(Character.isAlphabetic(c)) {
22+
stack.add(arr[c - 65]);
23+
} else {
24+
double c2 = stack.pop();
25+
double c1 = stack.pop();
26+
if(c == '*') {
27+
stack.add(c1 * c2);
28+
} else if(c == '+') {
29+
stack.add(c1 + c2);
30+
} else if(c == '/') {
31+
stack.add(c1/c2);
32+
} else {
33+
stack.add(c1-c2);
34+
}
35+
}
36+
}
37+
System.out.printf("%.2f\n", stack.peek());
38+
}
39+
}

0 commit comments

Comments
 (0)