후위 표기식2(1935)

NJW·2022년 6월 2일
0

코테

목록 보기
110/170

들어가는 말

주어진 후위 표식기를 계산해서 값을 소수점 둘째 자리까지 출력하는 문제다.

먼저 피연산자의 개수 N이 주어진다.
그리고 후위 표식기가 주어지는 데, 이때 피연산자는 각각 알파벳 대문자로 표현된다.
그리고 다음 줄에는 각 알파벳 대문자에 대응하는 피연산자가 입력된다.

코드 설명

이 문제에서 주의할 점은 소수점을 표현하기 때문에 변수형을 Double로 해야 한다는 것이다.

먼저 N과 후위 표식기 s를 받는다.

다음 for문을 0부터 N까지 돌면서 map에다가 해당하는 알파벳과 숫자를 넣어준다. 알파벳은 A부터 Z까지 차례대로 간다고 했으니 char c를 ++해주면 된다. 맵의 Key는 알파벳이고 value는 각 알파벳에 해당하는 숫자이다.

그리고 for문을 받은 후위 표식기만큼 돌려주는데, 만일 알파벳이 나오면 mpa의 각 알파벳에 해당하는 value를 스텍에 넣어준다.
연산자가 나오면 스텍을 pop해서 피연산자를 꺼낸다. 여기서 먼저 나온 숫자가 second이고 나중에 나온 숫자가 first이다.
후에 현재 연산자에 해당하는 연산을 해주면 된다.
연산을 끝내면 다시 스텍에 넣어준다.

마지막으로 출력을 하는데, 스텍에 결과 값이 있으니(계산한 값은 모두 스텍에 넣어주기 때문에) 스텍에서 pop을 해 소수점 두 자리 수까지 출력해주면 된다.

코드

import java.util.HashMap;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;

public class Main {
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Stack<Double> stack = new Stack<Double>();
		HashMap<Character, Double> map = new HashMap<Character, Double>();
		StringBuffer sb = new StringBuffer();
		
		int N = Integer.parseInt(br.readLine());
		String s = br.readLine();
		char c = 'A';
		double calculate = 0;
		
		for(int i=0; i<N; i++) {
			double num = Double.parseDouble(br.readLine());
			map.put(c, num);
			c++;
		}
		
		for(int i=0; i<s.length(); i++) {
			if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {
				stack.push(map.get(s.charAt(i)));
			}else {
				double second = stack.pop();
				double first = stack.pop();
				
				switch(s.charAt(i)) {
				case '+':
					calculate = first + second;
					break;
				case '-':
					calculate = first - second;
					break;
				case '*':
					calculate = first * second;
					break;
				case '/':
					calculate = first / second;
					break;
				}
				stack.push(calculate);
			}
		}
		
		sb.append(String.format("%.2f", stack.pop()));
		System.out.println(sb.toString());

	}
}
profile
https://jiwonna52.tistory.com/

0개의 댓글