https://www.acmicpc.net/problem/1935
1935번: 후위 표기식2
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이
www.acmicpc.net
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
import java.util.Stack;
public class Main{
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Double> num_stack = new Stack<Double>();
String word = br.readLine();
double count[] = new double[26];
for(int i=0; i<word.length(); i++) {
// 아스키코드 65~90 -> A~Z
int pos = word.charAt(i)-65;
// 알파벳이면 스택에 값 푸쉬, 중복 구별을 위한 알파벳에 따른 값 배열에 저장
if(pos>=0 && pos<=25) {
if(count[pos]==0) {
double num = Double.parseDouble(br.readLine());
count[pos]=num;
num_stack.push(num);
}
else {
num_stack.push(count[pos]);
}
}
// 연산자 나올시 값 2개 pop -> 두번째pop 연산자 첫번째pop 계산
else {
double x = num_stack.pop();
double y = num_stack.pop();
switch (word.charAt(i)) {
case '+':
num_stack.push(y+x);
break;
case '-':
num_stack.push(y-x);
break;
case '*':
num_stack.push(y*x);
break;
case '/':
num_stack.push(y/x);
break;
}
}
}
double result = num_stack.pop();
//소수점 2째자리 표헌 printf, String.format, Math.round
//String.format("%.2f",result);
//Math.round(result * 100) /100.0; 표현가능
System.out.printf("%.2f",result);
}
}
'백준' 카테고리의 다른 글
BOJ[JAVA] 2108 통계학 (0) | 2023.04.02 |
---|---|
BOJ[JAVA] 15828 Router (0) | 2023.04.02 |
BOJ[JAVA]_11725 트리의 부모 찾기 (0) | 2023.03.26 |
BOJ[JAVA] 14469 소가 길을 건너간 이유3 (0) | 2023.03.26 |
BOJ[JAVA]_ 12852 1로 만들기2 (0) | 2023.03.19 |