곽로그
[백준 1935, Java] 후위표기식2 본문
반응형
문제
check
1. 문제이해를 잘 못했다. ABCD에 대응하는 숫자가 차례로 주어지는 줄 알았다. 즉 1 1 1 1 이라도 A B C D로 주어지는 걸로 생각
→ 테스트 케이스를 잘 볼것
2. A의 아스키코드를 이용하면 꽤나 쉽게 풀 수 있다
3. Sting num = 10 이면 num.charAt(0)에 10 이 있는 걸로 생각.
코드
package october.fifthWeek;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.text.DecimalFormat;
import java.util.Stack;
public class PostfixExpression {
public static void main(String[] args) throws Exception {
/*
1) ABC*+DE/-를 입력받는다(operation)
2) alphabetNum을 선언한다(char[])
3) alphabet에 대응하는 숫자를 입력받는다.
3) operation을 순회하면서 index에 있는 요소가 연산자가 아니면(알파벳이면) alphabetNum에서 알파벳에 대응하는 숫자를 push하고
4) 연산자이면 스택에서 숫자 두개를 pop 하고 연산자와 연산한 값을 stack에 push 한다
*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
DecimalFormat decimalFormat = new DecimalFormat("####.00");
int[] alphabetNum = new int[26];
int N = Integer.parseInt(br.readLine());
String[] operation = br.readLine().split("");
for(int index = 0; index<N; index++){
alphabetNum[index] = Integer.parseInt(br.readLine());
}
Stack<Double> stack = new Stack<>();
for(int index = 0; index<operation.length;index++){
char element = operation[index].charAt(0);
if(isOperator(element)){
double num2 = stack.pop();
double num1 = stack.pop();
double result = operate(num1, num2,element);
stack.push(result);
}
else{
double num = alphabetNum[element-65];
stack.push(num);
}
}
String result = decimalFormat.format(stack.pop());
bw.write(result);
bw.flush();
}
public static double operate(double num1, double num2, char operator){
double result = 0;
if(operator=='+'){
result = num1+num2;
}
else if(operator=='-'){
result = num1-num2;
}
else if(operator=='*'){
result = num1*num2;
}
else if(operator=='/'){
result = num1/num2;
}
return result;
}
public static boolean isOperator(char operator){
boolean result = false;
if(operator=='+' ||operator=='-' ||operator=='/' || operator=='*'){
result = true;
}
return result;
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 1406, Java] 에디터 (0) | 2020.10.28 |
---|---|
[백준 10820, Java] 문자열 분석 (0) | 2020.10.27 |
[백준1158, Java] 요세푸스 문제 (0) | 2020.10.20 |
백준 19236 청소년 상어 (Java) (0) | 2020.10.17 |
[백준 15686, Java] 치킨배달 (0) | 2020.10.15 |
Comments