Javabom
  • Initial page
  • kimdh
    • ShouldKnow
    • IntelliJ
    • Spring Framework
      • SpringBoot
        • exception handling
      • SpringCloud
        • Zuul
        • Eureka
        • Ribbon
    • README.md
    • Web
      • RESTApi
      • Material Design
      • React
        • ESLint
    • Scala
      • Akka
    • Kotlin
    • DevTools
      • Redmine
      • Gerrit
      • Jenkins
      • VisualParadime
  • daengdaenglee
    • styled-components 라이브러리 활용 예
    • Postfix Notation
      • Stack을 이용하여 infix notation을 postfix notation으로 변경하기
      • Postfix Notation 계산하기
    • Slack App
      • Slack App 만들기 기초
  • EUNCHU
    • Javascript
      • Promise
      • Iterable Iterator 정의
    • Hooks
    • Java spring
      • Lombok
      • Untitled
    • Mysql
  • MINHEE
    • Spring Boot
      • 직렬화
        • 직렬화(Serializable)
        • Java의 직렬화(Serialize)란?
      • Optional [Java 8]
      • JPA
        • java bean mapper와 DTO
        • DAO - DTO - Entity의 차이
        • Map Struct 참고
      • Date의 흐름
    • Session 관리
      • Storage
        • localStorage/sessionStorage 클라이언트에 정보 저장
          • React 블로그 - 로그인 구현
      • Spring Security
        • Spring Security 회원가입 / 로그인 구현
  • Sherry
    • Untitled
  • JeongAh
    • Untitled
Powered by GitBook
On this page
  • 계산 방법
  • 사용할 데이터와 자료구조
  • 알고리즘
  • 예시
  • 연산자가 하나인 경우
  • 같은 계산 우선순위를 가진 연산자가 2개 이상 있는 경우
  • 높은 계산 우선순위를 가진 연산자가 먼저 오고 낮은 계산 우선순위를 가진 연산자가 나중에 오는 경우
  • 낮은 계산 우선순위를 가진 연산자가 먼저 오고 높은 계산 우선순위를 가진 연산자가 나중에 오는 경우
  • 다른 계산 우선순위를 가진 연산자가 2개 이상 있는 경우
  • 괄호가 포함된 복잡한 식의 경우

Was this helpful?

  1. daengdaenglee
  2. Postfix Notation

Postfix Notation 계산하기

계산 방법

사용할 데이터와 자료구조

  • postfix 방식으로 표기된 계산식 스트림

    • 의미 단위로 처리한다고 가정

    • 수와 연사자만 존재한다고 가정 (괄호는 postfix 표기법에서 필요 없음)

  • 계산 결과를 담을 스택

알고리즘

  1. 스트림에서 꺼낸 토큰이 수이면 스택에 push한다.

  2. 스트림에서 꺼낸 토큰이 연산자이면 스택에서 수를 2개 pop하여 연산자에 해당하는 연산을 수행한다. 수행한 결과로 나온 수를 다시 스택에 push한다.

    1. 처음 pop한 수가 오른쪽 피연산자이고 나중에 pop한 수가 왼쪽 피연산자이다.

  3. 스트림을 모두 처리했을때 스택에 남아있는 수가 계산 결과이다.

예시

연산자가 하나인 경우

# 문제

infix   : 2 + 3
postfix : 2 3 +
result  : 5

# 풀이 (순서대로 스트림, 스택)

[2, 3, +]
[]

[3, +]
[2]

[+]
[2, 3]

[]
[5]

같은 계산 우선순위를 가진 연산자가 2개 이상 있는 경우

# 문제

infix   : 2 + 3 - 4
postfix : 2 3 + 4 -
result  : 1

# 풀이 (순서대로 스트림, 스택)

[2, 3, +, 4, -]
[]

[3, +, 4, -]
[2]

[+, 4, -]
[2, 3]

[4, -]
[5]

[-]
[5, 4]

[]
[1]
# 문제

infix   : 3 * 4 / 5
postfix : 3 4 * 5 /
result  : 2.4

# 풀이 (순서대로 스트림, 스택)

[3, 4, *, 5, /]
[]

[4, *, 5, /]
[3]

[*, 5, /]
[3, 4]

[5, /]
[12]

[/]
[12, 5]

[]
[2.4]

높은 계산 우선순위를 가진 연산자가 먼저 오고 낮은 계산 우선순위를 가진 연산자가 나중에 오는 경우

# 문제

infix   : 2 * 3 + 4
postfix : 2 3 * 4 +
result  : 10

# 풀이 (순서대로 스트림, 스택)

[2, 3, *, 4, +]
[]

[3, *, 4, +]
[2]

[*, 4, +]
[2, 3]

[4, +]
[6]

[+]
[6, 4]

[]
[10]

낮은 계산 우선순위를 가진 연산자가 먼저 오고 높은 계산 우선순위를 가진 연산자가 나중에 오는 경우

# 문제

infix   : 2 + 3 * 4
postfix : 2 3 4 * +
result  : 14

# 풀이 (순서대로 스트림, 스택)

[2, 3, 4, *, +]
[]

[3, 4, *, +]
[2]

[4, *, +]
[2, 3]

[*, +]
[2, 3, 4]

[+]
[2, 12]

[]
[14]

다른 계산 우선순위를 가진 연산자가 2개 이상 있는 경우

# 문제

infix   : 2 + 3 * 4 - 5
postfix : 2 3 4 * + 5 -
result  : 9

# 풀이 (순서대로 스트림, 스택)

[2, 3, 4, *, +, 5, -]
[]

[3, 4, *, +, 5, -]
[2]

[4, *, +, 5, -]
[2, 3]

[*, +, 5, -]
[2, 3, 4]

[+, 5, -]
[2, 12]

[5, -]
[14]

[-]
[14, 5]

[]
[9]
# 문제

infix   : 2 + 3 * 4 / 5 - 6
postfix : 2 3 4 * 5 / + 6 -
result  : -1.6

# 풀이 (순서대로 스트림, 스택)

[2, 3, 4, *, 5, /, +, 6, -]
[]

[3, 4, *, 5, /, +, 6, -]
[2]

[4, *, 5, /, +, 6, -]
[2, 3]

[*, 5, /, +, 6, -]
[2, 3, 4]

[5, /, +, 6, -]
[2, 12]

[/, +, 6, -]
[2, 12, 5]

[+, 6, -]
[2, 2.4]

[6, -]
[4.4]

[-]
[4.4, 6]

[]
[-1.6]

괄호가 포함된 복잡한 식의 경우

# 문제

infix   : (7 + 3 - 6) + 5 * (4 / 2 + 1 - 9) + 13 / 5 * 21
postfix : 7 3 + 6 - 5 4 2 / 1 + 9 - * + 13 5 / 21 * +
result  : 28.6

# 풀이 (순서대로 스트림, 스택)

[7, 3, +, 6, -, 5, 4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[]

[3, +, 6, -, 5, 4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[7]

[+, 6, -, 5, 4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[7, 3]

[6, -, 5, 4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[10]

[-, 5, 4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[10, 6]

[5, 4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[4]

[4, 2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[4, 5]

[2, /, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[4, 5, 4]

[/, 1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[4, 5, 4, 2]

[1, +, 9, -, *, +, 13, 5, /, 21, *, +]
[4, 5, 2]

[+, 9, -, *, +, 13, 5, /, 21, *, +]
[4, 5, 2, 1]

[9, -, *, +, 13, 5, /, 21, *, +]
[4, 5, 3]

[-, *, +, 13, 5, /, 21, *, +]
[4, 5, 3, 9]

[*, +, 13, 5, /, 21, *, +]
[4, 5, -6]

[+, 13, 5, /, 21, *, +]
[4, -30]

[13, 5, /, 21, *, +]
[-26]

[5, /, 21, *, +]
[-26, 13]

[/, 21, *, +]
[-26, 13, 5]

[21, *, +]
[-26, 2.6]

[*, +]
[-26, 2.6, 21]

[+]
[-26, 54.6]

[]
[28.6]
# 문제

infix   : 1 * 2 - 3 * [{(4 + 5) * 6} + 7 * 8] - (9 + (12 - 15) * 5)
postfix : 1 2 * 3 4 5 + 6 * 7 8 * + * - 9 12 15 - 5 * + -
result  : -322

# 풀이 (순서대로 스트림, 스택)

[1, 2, *, 3, 4, 5, +, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[]

[2, *, 3, 4, 5, +, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[1]

[*, 3, 4, 5, +, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[1, 2]

[3, 4, 5, +, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2]

[4, 5, +, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3]

[5, +, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 4]

[+, 6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 4, 5]

[6, *, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 9]

[*, 7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 9, 6]

[7, 8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 54]

[8, *, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 54, 7]

[*, +, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 54, 7, 8]

[+, *, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 54, 56]

[*, -, 9, 12, 15, -, 5, *, +, -]
[2, 3, 110]

[-, 9, 12, 15, -, 5, *, +, -]
[2, 330]

[9, 12, 15, -, 5, *, +, -]
[-328]

[12, 15, -, 5, *, +, -]
[-328, 9]

[15, -, 5, *, +, -]
[-328, 9, 12]

[-, 5, *, +, -]
[-328, 9, 12, 15]

[5, *, +, -]
[-328, 9, -3]

[*, +, -]
[-328, 9, -3, 5]

[+, -]
[-328, 9, -15]

[-]
[-328, -6]

[]
[-322]
PreviousStack을 이용하여 infix notation을 postfix notation으로 변경하기NextSlack App

Last updated 5 years ago

Was this helpful?