-
[ 알고리즘 ] 백준 1935번 후위표기식 2프로그래밍/알고리즘 2019. 5. 2. 16:17
백준 1935번 후위표기식 2
아래 1918번 후위표기식을 풀고 바로 풀어서 그런 지, 바로 풀 수 있었다.
문제는 크게 어려움 없이, 두가지 경우로 나눠서 해결했다.
알파벳인 경우에는 해당하는 숫자를 바로 스택에 push해주었다.
연산자인 경우에는 스택에서 두 피연산자를 pop해준 뒤 ( 두번 ) 이를 연산자를 이용하여 계산하고, 이를 다시 스택에 push해주었다.
위의 두가지를 반복하여 답을 구하였고,
System.out.format()
함수를 이용하여 소수점 두자리 까지 표현하였다.코드
package Algorithms; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.Stack; /** * Baekjoon1935 * 백준 1935 후위표기식2 */ public class Baekjoon1935 { private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException { int N = Integer.parseInt(br.readLine()); Map<Character, Integer> map = new HashMap<>(); String input = br.readLine(); char key = 'A'; for (int i = 0; i < N; i++) { map.put(key, Integer.parseInt(br.readLine())); key++; } Stack<Double> stack = new Stack<>(); for (char c : input.toCharArray()) { if (Character.isAlphabetic(c)) { stack.push(Double.valueOf(map.get(c))); } else { double temp = calculate(stack.pop(), stack.pop(), c); stack.push(temp); } } System.out.format("%.2f",stack.pop()); } private static double calculate(Double num1, Double num2, char c) { switch (c) { case '+': return num2 + num1; case '-': return num2 - num1; case '*': return num2 * num1; case '/': return num2 / num1; default: return -1; } } }
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[ 알고리즘 ] 백준 3078번 좋은친구 (0) 2019.05.03 [ 알고리즘 ] 백준 1918번 후위표기식 (0) 2019.05.02 [알고리즘] 백준 2667번 단지번호붙이기 ( BFS ) (0) 2019.03.26 [알고리즘] 알고스팟 소풍 PICNIC (0) 2019.03.22 [알고리즘] 알고스팟 BOARDCOVER 게임판 덮기 문제 (0) 2019.03.22