📝 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가 마무리 되었다 😄
'해피 코딩 > Algorithm' 카테고리의 다른 글
| [Day 6] 후위 표현식 괄호 처리 (0) | 2026.02.26 |
|---|---|
| [Day 4] Linked List 데이터의 삭제 (1) | 2026.01.16 |
| [Day 3] LinkedList의 데이터 입력과 출력 (0) | 2026.01.12 |
| [Day 2] 자료구조의 확장 / Stack에서 ArrayList까지 (0) | 2026.01.02 |
| [Day 1] C언어의 메모리 구조 이해 / Stack구현 (1) | 2026.01.01 |