본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Postfix
  • 스택(Stack)을 이용하여 연산자가 뒤에 위치하도록 한 수식
  • 사람 입장에선 이해하기 어려우나 컴퓨터 입장에선 계산하기 수월하다
  • ex) 3 4 * 5 6 * +
    1. 3
    2. 3 4
    3. 3 4 *
    4. 12
    5. 12 5
    6. 12 5 6
    7. 12 5 6 *
    8. 12 30
    9. 12 30 +
    10. 42

세 가지 표기법

편집 원본 편집
표기법 연산자 위치 A + B (A + B) * C
전위(Prefix, 폴란드 표기법) 피연산자 앞 +AB *+ABC
중위(Infix) 피연산자 사이 A+B (A+B)*C
후위(Postfix) 피연산자 뒤 AB+ AB+C*

사람이 읽기 좋은 것은 중위지만, 괄호가 필요하고 우선순위를 알아야 한다. 전위·후위는 괄호 없이도 해석이 유일하다.

중위 표기법(Infix)은 연산자를 두 피연산자 사이에 쓰는 방식이다. 사람이 손으로 쓰는 수식과 같아 대부분의 프로그래밍 언어가 쓰는 가장 일반적인 표현이고, 산술·논리·비교 연산식에 두루 쓰인다. 피연산자 둘 사이에 연산자 하나를 두는 꼴이라 이항 연산자에 알맞다(단항 연산자는 앞이나 뒤에 따로 붙인다). 연산자를 피연산자 다음(뒤)에 쓰는 것은 후위 표기법이고, 앞에 쓰는 것은 전위 표기법이다.

중위 → 후위 변환

편집 원본 편집

손으로 푸는 법

편집 원본 편집
  1. 연산자 우선순위에 따라 수식 전체를 괄호로 완전히 묶는다.
  2. 각 괄호 안의 연산자를 그 괄호의 닫는 괄호 자리로 옮긴다.
  3. 괄호를 지운다.

예: (A + B) * C + (D + E)

1) 완전 괄호화 : ( ( (A+B) * C ) + (D+E) )
2) 연산자 이동 : ( ( (A B +) C * ) (D E +) + )
3) 괄호 제거   : A B + C * D E + +

따라서 답은 AB+C*DE++ 다.

스택을 쓰는 알고리즘

편집 원본 편집

조차장 알고리즘(Shunting-yard algorithm)이라 한다. 스택 하나로 처리한다.

  • 피연산자는 바로 출력한다.
  • 연산자는 스택에 넣되, 스택 꼭대기에 우선순위가 같거나 높은 연산자가 있으면 먼저 꺼내 출력한 뒤 넣는다.
  • 여는 괄호는 그냥 넣고, 닫는 괄호를 만나면 여는 괄호가 나올 때까지 꺼내 출력한다.
  • 수식이 끝나면 스택에 남은 연산자를 모두 꺼내 출력한다.

중위 → 전위 변환

편집 원본 편집

후위 변환과 같은 방법에서 연산자를 여는 괄호 자리로 옮기면 된다.

  1. 연산자 우선순위에 따라 수식 전체를 괄호로 완전히 묶는다. 대입 연산자 = 는 우선순위가 가장 낮다
  2. 각 괄호 안의 연산자를 그 괄호의 여는 괄호 자리로 옮긴다
  3. 괄호를 지운다

예: X = A + C / D

1) 완전 괄호화 : ( X = ( A + ( C / D ) ) )
2) 연산자 이동 : = ( X + ( A / ( C D ) ) )
3) 괄호 제거   : = X + A / C D

따라서 전위식은 =X+A/CD, 같은 식의 후위식은 XACD/+= 다.

전위 → 후위 변환

편집 원본 편집

전위식은 연산자가 피연산자 앞에 오므로, 연산자 하나와 바로 뒤의 피연산자 둘을 안쪽부터 묶어 가며 연산자를 뒤로 옮긴다.

예: - / * A + B C D E

1) + B C                 → (B C +)
2) * A (B C +)           → (A B C + *)
3) / (A B C + *) D       → (A B C + * D /)
4) - (A B C + * D /) E   → A B C + * D / E -

따라서 후위식은 A B C + * D / E - 이고, 중위식으로 쓰면 ((A * (B + C)) / D) - E 이다. 피연산자 A, B, C, D, E 의 순서는 세 표기법 모두 같고 연산자의 위치만 달라진다.

스택으로 할 때는 전위식을 오른쪽부터 읽는다. 피연산자는 스택에 넣고, 연산자를 만나면 두 개를 꺼내(먼저 꺼낸 것이 왼쪽 피연산자) "왼쪽 오른쪽 연산자" 로 이어 붙인 문자열을 다시 넣는다. 끝까지 읽으면 스택에 남은 하나가 후위식이다.

후위 수식 계산

편집 원본 편집

역시 스택으로 한다.

  • 피연산자를 만나면 스택에 넣는다.
  • 연산자를 만나면 스택에서 두 개를 꺼내 연산하고 결과를 다시 넣는다. 이때 먼저 꺼낸 것이 오른쪽 피연산자다.
  • 마지막에 스택에 남은 하나가 결과다.
수식 : 3 4 + 5 *
3      → [3]
4      → [3, 4]
+      → 3+4=7      → [7]
5      → [7, 5]
*      → 7*5=35     → [35]
결과 35
  • 후위 표기 수식을 수식 트리의 후위 순회 결과로 볼 수 있다. 전위 표기는 전위 순회, 중위 표기는 중위 순회에 대응한다.
  • 후위 → 중위 변환은 위 과정을 거꾸로 하면 된다.