중위 표기법을 완전 괄호화한 뒤 연산자를 괄호 자리로 이동시키는 "괄호 묶기" 암산 트릭으로 후위·전위 표기법을 10초 만에 구합니다. A+B*C, (A-B)/(C+D) 검산 예제와 기법의 한계까지 정리.
이 글은 "암기"가 아니라 "손풀이"를 다룹니다
정보처리기사 자료구조에서 중위·전위·후위 표기법 변환은 스택을 이용한 알고리즘으로 원리를 설명할 수 있습니다. 그 알고리즘 자체(스택에 연산자를 쌓고 우선순위에 따라 꺼내는 방식)는 이미 저희 블로그의 다른 두 글에서 스텝별 표로 완전히 다뤘습니다. 이 글의 목적은 다릅니다. 시험장에서 스택을 그릴 시간도, 트리를 그릴 시간도 없을 때 손으로 10초 만에 답을 뽑아내는 "괄호 묶기" 암산 트릭만 집중적으로 파고듭니다.
스택 알고리즘의 정석 풀이가 필요하다면 중위→후위 변환 스택 알고리즘 완전 정복을, 후위식 계산과 후위→중위 역변환이 궁금하다면 후위 표기법 10분 완전 정복을 참고하세요. 이 글은 그 두 글과 겹치지 않도록, 오직 괄호 묶기 기법 하나만 끝까지 판다는 원칙으로 썼습니다.
괄호 묶기 기법이란
원리는 단순합니다.
- 중위 표기법으로 주어진 수식을 연산자 우선순위에 따라 완전히 괄호로 묶습니다. 즉 연산자 하나마다 그 연산자와 좌우 피연산자를 감싸는 괄호 한 쌍을 만듭니다.
- 후위 표기법을 원하면, 각 괄호 쌍 안의 연산자를 그 쌍의 닫는 괄호 자리로 옮깁니다.
- 전위 표기법을 원하면, 각 괄호 쌍 안의 연산자를 그 쌍의 여는 괄호 자리로 옮깁니다.
- 연산자를 다 옮겼으면 괄호를 전부 지웁니다. 그게 답입니다.
"완전 괄호화 → 괄호 단위로 연산자 이동 → 괄호 제거." 세 단계만 손에 익히면 트리도, 스택도 필요 없습니다.
왜 이 트릭이 통할까 (원리)
수식은 본질적으로 이진 트리입니다. 완전히 괄호로 묶었을 때 괄호 한 쌍은 트리의 노드(연산자) 하나와 정확히 대응합니다. 괄호 안쪽 — 그 연산자의 좌우 피연산자 — 은 이미 그 노드의 왼쪽·오른쪽 서브트리를 완전히 표현한 상태입니다.
후위 표기법은 트리를 왼쪽 → 오른쪽 → 나(연산자) 순서로 방문하는 후위 순회(postorder)입니다. 괄호 쌍에서 "나"는 항상 맨 마지막, 즉 닫는 괄호 자리에 와야 순회 순서와 정확히 일치합니다. 그래서 연산자를 닫는 괄호 위치로 옮기면 됩니다.
전위 표기법은 반대로 나(연산자) → 왼쪽 → 오른쪽 순서로 방문하는 전위 순회(preorder)입니다. "나"가 맨 앞, 즉 여는 괄호 자리에 와야 하므로 연산자를 여는 괄호 위치로 옮기면 됩니다.
결국 이 트릭은 별도의 마법이 아니라 완전 괄호화가 이미 트리 구조를 텍스트로 펼쳐놓은 것이라는 사실을 이용하는 것뿐입니다. 괄호가 트리의 경계를 대신 그려주기 때문에, 연산자만 정해진 자리로 슬라이드시키면 순회 결과가 그대로 나옵니다.
예제 1: A+B*C — 안쪽부터 바깥쪽으로 밀어내기
연산자 우선순위는 *가 +보다 높으므로, B*C를 먼저 묶고 그 결과를 A와 +로 묶습니다.
완전 괄호화: (A+(B*C))
후위 표기법 변환
- 1단계 — 안쪽 괄호 (B*C): 연산자 *를 닫는 괄호 자리로 이동 → (B C *) → 괄호를 지우면 BC*
- 2단계 — 바깥 식은 이제 (A+BC*): 연산자 +를 닫는 괄호 자리로 이동 → (A BC* +) → 괄호를 지우면 ABC*+
결과: ABC*+
전위 표기법 변환
- 1단계 — 안쪽 괄호 (B*C): 연산자 *를 여는 괄호 자리로 이동 → (* B C) → 괄호를 지우면 *BC
- 2단계 — 바깥 식은 이제 (A+*BC): 연산자 +를 여는 괄호 자리로 이동 → (+ A *BC) → 괄호를 지우면 +A*BC
결과: +A*BC
검산: A+B*C를 트리로 그리면 루트가 +(우선순위가 가장 낮은 연산자가 트리 최상단), 왼쪽 자식 A, 오른쪽 자식이 *(B, C) 서브트리입니다. 후위 순회(좌→우→나)는 A, B, C, *, + 순서 → ABC*+. 전위 순회(나→좌→우)는 +, A, *, B, C 순서 → +A*BC. 두 결과 모두 괄호 묶기로 얻은 답과 정확히 일치합니다.
예제 2: (A-B)/(C+D) — 이미 괄호가 있는 식
이번엔 원래 식에 괄호가 이미 들어있는 경우입니다. A-B와 C+D는 각각 독립된 연산이고, 그 두 결과를 /로 묶는 구조이므로 완전 괄호화는 바깥에 한 겹만 더 씌우면 끝입니다.
완전 괄호화: ((A-B)/(C+D))
후위 표기법 변환
- 1단계 — 왼쪽 괄호 (A-B): 연산자 -를 닫는 괄호 자리로 이동 → AB-
- 1단계 — 오른쪽 괄호 (C+D): 연산자 +를 닫는 괄호 자리로 이동 → CD+
- 2단계 — 바깥 식은 이제 (AB-/CD+): 연산자 /를 닫는 괄호 자리로 이동 → AB-CD+/
결과: AB-CD+/
전위 표기법 변환
- 1단계 — 왼쪽 괄호 (A-B): 연산자 -를 여는 괄호 자리로 이동 → -AB
- 1단계 — 오른쪽 괄호 (C+D): 연산자 +를 여는 괄호 자리로 이동 → +CD
- 2단계 — 바깥 식은 이제 (-AB/+CD): 연산자 /를 여는 괄호 자리로 이동 → /-AB+CD
결과: /-AB+CD
검산: 트리 루트는 /(가장 마지막에 계산되는 연산자), 왼쪽 서브트리는 -(A,B), 오른쪽 서브트리는 +(C,D)입니다. 후위 순회(좌→우→나) → A, B, -, C, D, +, / → AB-CD+/. 전위 순회(나→좌→우) → /, -, A, B, +, C, D → /-AB+CD. 표준 알고리즘 결과와 정확히 일치합니다.
이 기법의 한계 — 솔직하게 짚고 넘어가기
괄호 묶기 기법은 강력하지만 만능은 아닙니다. 실전에서 자주 틀리는 지점을 미리 알아두세요.
- 완전 괄호화 자체를 잘못하면 답도 틀립니다. 이 기법은 "괄호를 정확히 씌운 이후"의 이동 규칙일 뿐, 우선순위 판단(연산자 순위, 결합 방향)을 대신 해주지 않습니다. 우선순위를 착각하면 처음부터 잘못된 괄호가 만들어지고, 이후 단계는 아무리 정확히 밀어내도 오답입니다.
- 연산자가 3개 이상 겹치는 복잡한 식에서는 괄호 쌍이 헷갈리기 쉽습니다. 예를 들어 A+B*C-D/E처럼 항이 많아지면, 어느 괄호가 어느 연산자와 짝인지 손으로 표시하지 않고 암산만으로 처리하다가 짝을 놓치는 실수가 나옵니다. 항이 3개를 넘어가면 연필로 괄호를 실제로 그려보는 것이 안전합니다.
- 같은 우선순위 연산자의 결합 방향(왼쪽 우선)을 놓치기 쉽습니다. A-B-C처럼 우선순위가 같은 연산자가 연속되면 왼쪽부터 묶어야 합니다: ((A-B)-C). 오른쪽부터 묶으면(A-(B-C)) 전혀 다른 식이 되어 답이 틀어집니다.
- 단항 연산자(부호 -A 등)가 섞인 식은 이 글에서 다루는 기본형 트릭만으로는 처리 난이도가 올라갑니다. 단항 연산자는 피연산자가 하나뿐이므로 괄호 쌍의 구조가 달라집니다.
결론적으로 이 기법은 "우선순위 판단은 정확히 하되, 옮기는 손동작만 빠르게 만들어주는" 보조 도구로 이해하는 것이 정확합니다. 우선순위 자체가 헷갈린다면 스택 알고리즘으로 원리부터 다시 잡는 것을 추천합니다.
시험 실전 팁
- 객관식 문제에서는 완전 괄호화 단계까지만 머릿속으로 그려도 정답 후보를 2개 이하로 좁힐 수 있습니다. 보기 중 연산자 순서가 눈에 띄게 다른 오답은 이 단계에서 바로 걸러집니다.
- 후위 변환은 "안쪽 괄호부터" 처리하고, 전위 변환도 마찬가지로 "안쪽 괄호부터" 처리한 뒤 바깥으로 나가는 순서를 지키세요. 바깥쪽부터 손대면 안쪽 연산자의 자리가 아직 정해지지 않아 꼬입니다.
- 시험지 여백에 완전 괄호화한 식을 딱 한 번 적어두면, 후위와 전위를 둘 다 물어보는 복수 문제가 나와도 다시 계산할 필요 없이 같은 괄호식에서 두 방향으로만 밀면 됩니다.
- 답을 낸 뒤 시간이 남으면, 후위식은 왼쪽부터 스택에 쌓아 계산해보고 원래 중위식과 값이 같은지 검산하는 습관을 들이세요.
자주 묻는 질문
- Q. 이 괄호 묶기 기법과 스택 알고리즘 중 어느 쪽을 먼저 배워야 하나요?
- 원리 이해는 스택 알고리즘 쪽이 더 명확합니다. 스택 알고리즘으로 "왜" 그렇게 변환되는지 한 번 제대로 이해한 다음, 이 글의 괄호 묶기 기법으로 실전 속도를 올리는 순서를 추천합니다. 스택 알고리즘 정석 풀이는 중위→후위 변환 완전 정복 글을 참고하세요.
- Q. 후위 표기법으로 나온 답이 맞는지 어떻게 검산하나요?
- 후위식을 왼쪽부터 읽으며 피연산자는 스택에 쌓고, 연산자를 만나면 스택 맨 위 두 값을 꺼내 계산한 뒤 다시 스택에 넣는 방식으로 검산합니다. 이 계산법과 후위→중위 역변환은 후위 표기법 10분 완전 정복 글에서 예제로 다뤘습니다.
- Q. 전위 표기법은 실무에서도 쓰이나요?
- 네. 전위 표기법은 함수 호출 구조(연산자가 먼저 오고 인자가 뒤따르는 형태)와 유사해 컴파일러의 추상 구문 트리(AST) 표현이나 Lisp 계열 언어 문법에서 실제로 쓰입니다. 정보처리기사에서는 트리 순회 개념을 확인하는 문제로 자주 출제됩니다.
세 편을 함께 보면 자료구조 표기법은 완전 정리됩니다
이 글은 괄호 묶기 손풀이 하나에만 집중했습니다. 스택을 이용한 정석 변환 알고리즘이 필요하면 중위→후위 표기법 변환 15분 완전 정복을, 후위식 계산과 후위→중위 역변환, 3자 비교가 필요하면 정보처리기사 후위 표기법 10분이면 끝을 이어서 보세요. 세 글을 순서대로 보면 원리부터 손풀이, 계산·역변환까지 자료구조 수식 표기법 파트를 빈틈없이 정리할 수 있습니다.
강의 영상으로 직접 손을 움직이며 연습하고 싶다면 아래에서 무료로 확인하세요.
수강 정보
| 항목 | 내용 |
|---|---|
| 수강료 | 무료 |
| 강의 수 | 1강 |
| 카테고리 | 자격증 |
| 강사 | 누구나패스 |
| 수강 방식 | 온라인(PC·모바일) |
회원가입 후 즉시 수강할 수 있으며, 언제든 다시 돌려볼 수 있습니다. 추가 비용 없이 무료로 제공됩니다.
댓글
불러오는 중...
