본문 바로가기
해피 코딩/Algorithm

[Day 5] 후위 표현식(Postfix)

by happy-coding 2026. 2. 25.
📝 2025 C언어 특강 내용 기록

😼 Github : https://github.com/mad-cost/C-structures-basics

 

Day 4에서는 마지막으로 LinkedList의 삭제를 구현하며
LinkedList를 완성하였고,

 

Day 5에서는 중위 표현식을 후위 표현식으로 바꾸는 방법
그림을 통해 알아보도록 하자.


📐 전위 표현식 / 중위 표현식 / 후위 표현식

우리가 평소에 사용하는 A + B 와 같은 형태를
중위 표현식(Infix) 이라고 한다.

 

사람에게는 직관적이고 이해하기 쉬운 방식이지만,
컴퓨터는 우리의 생각보다
그다지 똑똑하지 않은 것 같다 😅

 

연산자 우선순위, 괄호 처리 등
생각보다 고려해야 할 것이 많기 때문이다.


전위 표현식(Prefix) 
연산자가 에 위치하는 형태이고,

 

후위 표현식(Postfix) 
연산자가 에 위치하는 형태이다.

 

이제 우리는
인간에게 익숙한 중위 표현식
컴퓨터가 계산하기 편한 후위 표현식으로 바꾸는
여정을 떠나보도록 하자.


( 삐빅.. 일해라 휴먼. 🤖 )


🧩 그림으로 이해하는 후위 표현식

코드는 Github에 정리해두었기 때문에,
블로그의 특성을 살려
여기서는 중위 표현식을 후위 표현식으로 바꾸는 과정
그림으로 이해해보도록 하자.

📌 완성된 코드는 GitHub에서 확인하세요.
😼 Github : https://github.com/mad-cost/C-structures-basics

 

자, 지금부터
게임을 하나 시작해보자

룰은 아주 간단하다.


📋 후위 표현식 게임 룰

1️⃣ 피연산자가 나오면
→ result[ ] 배열에 넣어준다.

 

2️⃣ 연산자가 나오면
→ stack[ ] 배열에 넣어준다.

 

3️⃣ 연산자를 stack에 넣을 때

  • 기존에 있던 연산자의 우선순위가 나보다 크거나 같으면
    → stack에서 꺼내 result[ ] 배열에 넣어준다.
  • 그렇지 않다면
    → 내가 stack에 들어간다.

4️⃣ 전역 변수, 전역 배열 사용 금지 🚫
(우리의 실력 향상은 중요하니까! ☺️)


📊 중위표현식 → 후위 표현식 변환

 

사용자가 다음 중위 표현식을 입력했다고 가정하자.

A + B * C + D

이제 게임 룰에 따라
중위 표현식을 후위 표현식으로 변환해보자.

 

1️⃣ A입력

A는 피연산자이므로,
바로 result[ ] 배열에 넣어준다.

 

2️⃣ + 입력

+는 연산자이므로
stack[ ]에 넣어준다.

 

3️⃣ B 입력

B는 피연산자이므로
result[ ]에 넣어준다.

 

4️⃣ * 입력

*는 연산자이다.


 * 과 + 우선순위 비교

*의 우선순위가 +보다 높으므로,
*를 그대로 stack에 넣어준다.

 

5️⃣ C 입력

C는 피연산자이므로
result[ ]에 추가한다.

 

6️⃣ + 입력

+는 연산자이다.
이제 stack에 있는 연산자들과 우선순위를 비교한다.

 

 +와 * 비교

🔹 stack top: *

*은 +보다 우선순위가 높거나 같으므로

stack에서 꺼내 result[ ]에 넣어준다.

 

 + 와 + 우선순위 비교

🔹 stack top: +

기존 +는 새로 들어올 +와 우선순위가 같으므로

stack 에서 꺼내 result[ ]에 넣어준다.

 

 

이제 stack이 비었으므로
현재 연산자 +를 stack에 넣는다.

 

7️⃣ D 입력

D는 피연산자이므로
result[ ]에 추가한다.

 

8️⃣ 입력 종료 → stack 비우기

모든 입력이 끝났다면
stack에 남아 있는 연산자를 모두 꺼내 result[ ]에 넣어준다.

 

✅ 최종 결과

중위 표현식 ➡️ 후위 표현식

A + B * C + D ➡️ A B C * + D +

📝 마무리하며

후위 표현식(Postfix) 에 대한 개념을 정리해보았다.

 

후위 표현식(Postfix)의 경우,
이론만 들었을 때는 코드가 머릿속으로 바로 그려질 정도로
상당히 구현이 쉬워 보인다는 느낌을 받았다.

 

(참고로 LinkedList를 처음 배웠을 때도
똑같은 생각을 했었다… 쉿! 🤫)

 

이로써 Day 5가 마무리 되었다 😄