Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

후위식 연산(postfix) 본문

알고리즘

후위식 연산(postfix)

ultra_dev 2023. 4. 7. 23:02

후위식 연산(postfix)

설명

후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.

만약 3*(5+2)-9 을 후위연산식으로 표현하면 352+*9- 로 표현되며 그 결과는 12입니다.

입력

첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.

식은 1~9의 숫자와 +, -, *, / 연산자로만 이루어진다.

출력

연산한 결과를 출력합니다.

예시 입력 1

352+*9-

예시 출력 1

12

📌 .isDigit → char값이 숫자인지 여부 판단하여 true false 리턴

lt rt활용. 먼저 뺀걸rt 나중에 뺀걸 lt로해서 나중에 뺀거로 후위연산

else if로 일일히 연산자들 지정.. for문내에서 돌돌돌

import java.util.Scanner;
import java.util.Stack;

class Main {

  public int solution(String str) {
    int answer = 0;
    Stack<Integer> stack = new Stack<>();
    for (char x : str.toCharArray()) {
      //char 값이 숫자인지 여부 판단하여 true false 리턴
      if (Character.isDigit(x)) {
        stack.push(x - 48); //뒤에서 연산할거니까 숫자로 넣어줘야하는데 48을 빼줘야 숫자화 가능함
      } else {
        int rt = stack.pop();
        int lt = stack.pop();
        //'임
        if (x == '+') {
          stack.push(lt + rt);
        }
        //lt에서 rt빼는거임. 나중에 pop한거에서 먼저 pop한걸 빼줌. 후위연산
        else if (x == '-') {
          stack.push(lt - rt);
        } else if (x == '*') {
          stack.push(lt * rt);
        } else if (x == '/') {
          stack.push(lt / rt);
        }
      }
    }
    answer = stack.get(0);
    return answer;
  }

  public static void main(String[] args) {
    Main T = new Main();
    Scanner sc = new Scanner(System.in);
    String str = sc.next();
    System.out.println(T.solution(str));
  }
}

'알고리즘' 카테고리의 다른 글

쇠막대기(stack)  (0) 2023.05.25
크레인 인형 뽑기(Stack)  (0) 2023.03.31
괄호문자제거(Stack)  (0) 2023.03.30
올바른 괄호(Stack)  (0) 2023.03.30
K번째 큰 수 (TreeSet)  (0) 2023.03.29
Comments