Park DJ
dj0998
Park DJ
전체 방문자
오늘
어제
  • 분류 전체보기 (363)
    • 백준 (363)

공지사항

인기 글

태그

  • 백준 15961
  • 백준 24039
  • 백준 12871
  • 백준 3049
  • 백준 3135
  • 백준 2591
  • 백준
  • 백준 16194
  • 백준 2467
  • 자바
  • 백준 4659
  • 백준 1531
  • 백준 2343
  • 백준 12605
  • 백준 14582
  • 백준 1064
  • 백준 1747
  • 백준 1011
  • 백준 7662
  • 백준 6550
  • 백준 7567
  • Java
  • 백준 1495
  • 백준 10709
  • 백준 15312
  • 백준 16926
  • 백준 8892
  • 백준 1914
  • 백준 2225
  • 백준 15655
hELLO · Designed By 정상우.
Park DJ

dj0998

백준 1935 후위 표기식2(Java)
백준

백준 1935 후위 표기식2(Java)

2023. 2. 3. 15:08

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

 

1935번: 후위 표기식2

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

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 후위 표기식을 이해하는 것이 가장 중요합니다. 자세한 것은 링크를 참조하시기 바랍니다.

https://ko.wikipedia.org/wiki/역폴란드_표기법

 

역폴란드 표기법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 역폴란드 표기법(RPN, reverse Polish notation) 또는 후위 표기법(후치 표기법)(後位 -, postfix notation)은 연산자를 연산 대상의 뒤에 쓰는 연산 표기법이다. 예를 들어,

ko.wikipedia.org

문자열을 입력받은후 str에 저장합니다. 그다음 알파벳에 해당하는 수가 주어지므로 HashMap에 알파벳과 그에 해당하는 수를 저장합니다. 그다음 반복문을 통해 알파벳이면 해당하는 수를 Stack에 push 합니다. 알파벳이 아닌 경우에는 마지막에 push 된 수 2개를 가지고 연산을 한 후에 다시 push 하면 됩니다. 마지막으로 스택에 남은수를 출력해 주면 됩니다.


 

Java 코드

 


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

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    Stack<Double> stack = new Stack<>();
    HashMap<Character, Integer> map = new HashMap<>();

    int n = sc.nextInt();
    String str = sc.next();
    
   
    for(char i = 'A'; i < 'A' + n; i++) {
      map.put(i, sc.nextInt());
    }

    for(int i = 0; i < str.length(); i++) {
      char c = str.charAt(i);
      if(c >= 65 && c <= 90) stack.push((double)map.get(c));
        
      else {
        double a = stack.pop();
        double b = stack.pop();

        if(c == '+') stack.push(b + a);
        else if(c == '-') stack.push(b - a);
        else if(c == '*') stack.push(b * a);
        else if(c == '/') stack.push(b / a);
      }
    }
    
    System.out.println(String.format("%.2f", stack.pop()));
  }
}

'백준' 카테고리의 다른 글

백준 1449 수리공 항승(Java)  (0) 2023.02.03
백준 11478 서로 다른 부분 문자열의 개수(Java)  (0) 2023.02.03
백준 10451 순열 사이클(Java)  (0) 2023.02.03
백준 10972 다음 순열(Java)  (1) 2023.02.03
백준 3273 두 수의 합(Java)  (0) 2023.02.03
    '백준' 카테고리의 다른 글
    • 백준 1449 수리공 항승(Java)
    • 백준 11478 서로 다른 부분 문자열의 개수(Java)
    • 백준 10451 순열 사이클(Java)
    • 백준 10972 다음 순열(Java)
    Park DJ
    Park DJ

    티스토리툴바