Post

RPN(Reverse Polish Notation)이란?

출처 위키백과 출처 위키백과

RPN이란 Reverse Polish Notation의 약자로 역폴란드 표기법이라고 합니다. 연산자를 수식 뒤쪽에 쓰는 표기법으로써 후위 표기법(postfix notation)이라고 하기도 합니다.

💡 여기서 Polish는 폴란드의 논리학자인 얀 우카시에비치(Jan Łukasiewicz)가 고안한 폴란드 표기법(Polish Notation, 전위 표기법으로 불리기도 합니다)에서 유래됐습니다.

일반적으로 수식 계산을 할 때 사용하던 연산자를 수의 중간에 쓰는 중위 표기법(1 + 2와 같은)과 달리 후위 표기법이라는 이름에서 볼 수 있듯이 RPN은 연산자가 뒤에 들어가게 됩니다.

예시

1 + 2 - 3

다음과 같은 수식이 있을 때 이 수식을 RPN으로 쓰면 다음과 같습니다.

1 2 + 3 -

RPN을 쓰는 이유

RPN을 쓰는 이유는 우선순위를 신경쓰지 않아도 되기 때문입니다. 우리가 평소에 사칙연산을 할 때 사용하는 중위 표기법의 경우 연산의 우선순위를 고려해야하기 때문에 계산하는데 있어서 추가적인 처리가 필요합니다. 그러나 RPN 즉 후위 표기법의 경우 연산 우선순위와 상관없이 순서대로 계산하면 되기 때문에 추가적인 처리가 필요 없습니다.

따라서 비교적 빠른 연산이 가능해집니다. 그리고 스택을 활용하여 쉽게 구현할 수 있습니다.

내부적으로 RPN을 사용하는 프로그램들(Forth, STOIC, etc.)을 종종 만날 수 있습니다.

Stack을 활용한 구현

간단하게 1 + 2 - 3을 Stack을 활용해 구현해보겠습니다.

RPN을 사용하여 나타내면 1 2 + 3 - 가 됩니다.

로직은 간단히 숫자가 나오면 스택에 넣어주고 연산자가 나오면 스택의 상위 값 2개를 꺼내 연산을 해주고 다시 넣어주면 됩니다.

스택연산식설명
12 + 3 -스택에 1을 넣어줍니다
2
1
+ 3 -스택에 2를 넣어줍니다
 + 3 -연산자가 나왔으니 스택의 상위 값 2개를 빼서 연산해줍니다 2 + 1 = 3
33 -연산 결과를 스택에 넣어줍니다
3
3
-스택에 3을 넣어줍니다
 -스택에서 값을 빼서 - 연산을 해줍니다 3 - 3 = 0
0 연산 결과를 스택에 넣어줍니다.

다음과 같이 스택을 활용하여 RPN 계산을 할 수 있습니다.

Reference

Reverse_Polish_notation
Reverse Polish notation

This post is licensed under CC BY 4.0 by the author.