코디잉

1935번: 후위 표기식2 [JAVA] 본문

자료구조&알고리즘/백준

1935번: 후위 표기식2 [JAVA]

yong_ღ'ᴗ'ღ 2023. 7. 19. 00:53

https://www.acmicpc.net/problem/1935

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net

*후위표기식

스택에 피연산자를 넣고, 연산자가 나오면 꺼내서 계산하고 다시 넣어주면 된다.

ex. 123*+45/-  

stack.push(1); stack.push(2); stack.push(3);

연산자 *가 나왔으니까 stack.pop() 2번해서 숫자 2개 꺼내서 

결과값을 다시 stack.push(2*3)로 넣어준다.

 2번째로 pop한 숫자 연산자 1번째로 pop한 숫자

 

접근 방식)

1. 피연산자가 A~Z까지 순서대로 N개의 사용된다고 하니 N칸의 배열 만들어서 해당하는 값을 넣어준다.

    (아스키코드 사용해서 값 꺼내올 예정)

2. Double 타입의 Stack만들어서 문자열 길이만큼 돌면서

2-1)문자열.charAt()이 알파벳 중 하나라면, stack.push()한다. → 배열에 저장해놓은 값을 이용해서 stack에 값 넣어줌!

2-2)알파벳 아니라면, switch문 돌면서 계산해서 다시 stack.push(계산한값) 해준다.

3. stack에 남아있는 결과값을 소숫점 둘째 자리까지만 출력되도록 한다.

 

package tony_git.data_structure;

import java.io.*;
import java.util.*;

public class B_1935 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String s = br.readLine();

        // 사용되는 알파벳의 값 저장
        double[] alphabet = new double[26];
        for (int i = 0; i < N; i++) {
            alphabet[i] = Double.parseDouble(br.readLine());
        }

        Stack<Double> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char now = s.charAt(i);
            if (now >= 'A' && now <= 'Z') {
                stack.push(alphabet[now - 'A']);
            } else {
                double num1 = stack.pop();
                double num2 = stack.pop();
                switch(now) {
                    case '+':
                        stack.push(num2 + num1);
                        break;
                    case '-':
                        stack.push(num2 - num1);
                        break;
                    case '*':
                        stack.push(num2 * num1);
                        break;
                    case '/':
                        stack.push(num2 / num1);
                        break;
                }
            }
        }
        System.out.printf("%.2f\n", stack.pop());
    }
}

'자료구조&알고리즘 > 백준' 카테고리의 다른 글

11279번: 최대 힙 [JAVA]  (0) 2023.07.20
2346번: 풍선 터뜨리기 [JAVA]  (0) 2023.07.19
9012번: 괄호 [JAVA]  (0) 2023.07.18
10811번: 바구니 뒤집기 [JAVA]  (0) 2023.07.17
2751번: 수 정렬하기 2 [JAVA]  (0) 2023.07.16
Comments