중위식 → 후위식(RPN) 변환기
수식을 후위 표기법(RPN)으로 바꾸고 조차장 알고리즘의 스택이 단계마다 어떻게 움직이는지 보여줍니다. 괄호를 모두 채운 식과 계산 결과를 함께 내어 2^3^2가 512인 이유처럼 우선순위·결합방향이 어디서 갈리는지 확인할 수 있습니다.
괄호·함수(sin, sqrt, max…)·변수 x, y를 쓸 수 있습니다. 200자까지.
후위식 (RPN)
3 4 2 * 1 5 - / +
연산자를 피연산자 뒤에 쓰는 표기법입니다. 괄호가 하나도 없고, 왼쪽부터 한 번만 훑으며 스택에 쌓았다 꺼내면 계산이 끝납니다.
스택이 움직이는 과정
| 읽은 것 | 한 일 | 출력 큐 | 연산자 스택 (아래→위) |
|---|---|---|---|
| 3 | 값이므로 곧장 출력으로 | 3 | 비어 있음 |
| + | 꼭대기가 더 약하거나 비어 있어 그대로 쌓는다 | 3 | + |
| 4 | 값이므로 곧장 출력으로 | 3 4 | + |
| * | 꼭대기가 더 약하거나 비어 있어 그대로 쌓는다 | 3 4 | + * |
| 2 | 값이므로 곧장 출력으로 | 3 4 2 | + * |
| / | 더 세게 붙는 연산자 1개를 내린 뒤 쌓는다 | 3 4 2 * | + / |
| ( | 여는 괄호는 그대로 쌓는다 — 벽이 된다 | 3 4 2 * | + / ( |
| 1 | 값이므로 곧장 출력으로 | 3 4 2 * 1 | + / ( |
| - | 꼭대기가 더 약하거나 비어 있어 그대로 쌓는다 | 3 4 2 * 1 | + / ( - |
| 5 | 값이므로 곧장 출력으로 | 3 4 2 * 1 5 | + / ( - |
| ) | 괄호가 닫혔다 — 1개를 내리고 여는 괄호를 버린다 | 3 4 2 * 1 5 - | + / |
| (끝) | 스택에 남은 2개를 차례로 내린다 | 3 4 2 * 1 5 - / + | 비어 있음 |
값은 곧장 출력 큐로 가고 연산자만 스택에 잠깐 올라갑니다. 새 연산자를 쌓기 전에 꼭대기가 더 세게 붙는 동안 내리는 것이 이 알고리즘의 전부입니다. 여는 괄호는 벽 노릇을 해서 그 아래는 건드리지 않고, 닫는 괄호를 만나면 벽까지 한꺼번에 내립니다.
사용 방법
- 1수식을 적습니다. 괄호·함수·변수 x, y를 쓸 수 있습니다.
- 2후위식(RPN)과 괄호를 모두 채운 중위식을 확인합니다.
- 3단계 표에서 연산자가 스택에 올라갔다 내려오는 순서를 봅니다.
- 4변수를 쓴 식이라면 x·y 값을 넣어 계산 결과를 확인합니다.
- 52^3^2, -2^2 같은 예제로 결합방향과 단항 부호가 어떻게 갈리는지 봅니다.
자주 묻는 질문
연산자를 피연산자 뒤에 쓰는 표기법입니다. 1 + 2 × 3은 후위식으로 1 2 3 × +가 됩니다. 괄호가 전혀 필요 없고 스택 하나로 왼쪽부터 한 번만 훑으면 계산이 끝나기 때문에 계산기·가상머신·컴파일러 안쪽에서 널리 쓰입니다.
열차를 옆 선로에 잠깐 빼 두었다가 순서를 바꿔 내보내는 철도 조차장에서 이름을 따왔습니다. 값은 곧장 출력 줄에 붙고 연산자만 스택이라는 옆 선로에 잠깐 올라갔다가, 자기보다 약한 연산자가 오면 내려와 줄 뒤에 붙습니다. 1961년 다익스트라가 고안했습니다.
512입니다. 거듭제곱은 오른쪽 결합이라 2^(3^2) = 2^9 = 512로 읽습니다. (2^3)^2 = 64가 아닙니다. 조차장에서는 새로 들어온 ^가 스택 꼭대기의 ^를 내리지 않는 것으로 구현되며, 이 도구의 단계 표에서 그 자리를 직접 볼 수 있습니다.
−4입니다. 부호가 거듭제곱보다 바깥에 있어 −(2^2)로 읽기 때문입니다. 종이에 적는 수학 관례와 같습니다. 다만 엑셀 같은 스프레드시트는 반대로 (−2)^2 = 4로 계산하므로 식을 옮겨 적을 때 주의해야 합니다.
우선순위가 같은 연산자를 만났을 때 스택에서 내릴지 말지 하나로 갈립니다. 내리면 왼쪽 결합(8 − 3 − 2 = 3), 그대로 쌓으면 오른쪽 결합(2^3^2 = 512)입니다. 사칙연산은 모두 왼쪽 결합이고 거듭제곱과 단항 부호만 오른쪽 결합입니다.
함수 이름은 스택에 얹어 두었다가 짝이 되는 닫는 괄호에서 내립니다. 쉼표는 여는 괄호가 나올 때까지 연산자를 내리라는 신호입니다. 인자 하나가 끝났다는 뜻이므로 그때까지 쌓인 연산자를 모두 정리해야 다음 인자와 섞이지 않습니다.
결과는 같지만 하는 일이 다릅니다. 후위 순회는 이미 만들어진 트리를 훑는 것이고, 조차장 알고리즘은 트리를 만들지 않고 문자열에서 바로 후위식을 뽑아냅니다. 식으로 트리를 만든 뒤 후위 순회하면 같은 답이 나옵니다.
전송되지 않습니다. 변환과 계산은 모두 브라우저 안에서 이뤄지고, 입력한 식은 이 기기에만 남습니다.
알아두면 좋은 점
- 만든 후위식을 스택 기계로 계산한 값을, 같은 식을 재귀 하향 파서로 계산한 값과 대조합니다. 원리가 전혀 다른 두 경로라 우선순위·결합방향·단항 부호 중 하나라도 어긋나면 두 값이 갈라집니다. 27가지 식을 네 쌍의 (x, y)에서 검사했습니다.
- 괄호를 모두 채운 중위식을 다시 파서에 넣어 원래 식과 같은 값이 나오는지도 검사합니다. 결합방향을 잘못 적으면 여기서 잡힙니다.
- 2^3^2 = 512(오른쪽 결합), 8 − 3 − 2 = 3(왼쪽 결합), −2^2 = −4(부호가 바깥), 2^−3 = 0.125(지수 쪽 부호)를 검산값으로 고정했습니다.
- 단항 부호는 우선순위를 거듭제곱보다 낮고 곱셈보다 높게 두었고, 접두 연산자라 스택에 밀어 넣을 때 아무것도 내리지 않습니다. 이 규칙이 없으면 2^−3에서 거듭제곱이 먼저 내려와 식이 깨집니다.
- 2x, 3(x+1)처럼 곱셈 기호를 생략한 자리는 곱셈 토큰을 끼워 넣어 처리하며, 단계 표에 「암묵적 곱셈」으로 표시합니다. 다만 이름끼리 붙여 쓴 xy는 x 곱하기 y가 아니라 「xy라는 모르는 이름」으로 거절됩니다.
- 아는 함수 이름 밖으로는 나갈 수 없습니다. 식을 자바스크립트로 실행하지 않고 직접 토큰으로 쪼개 읽으므로, 입력창이 실행창이 되는 일이 없습니다.
- 식은 200자까지, 함수는 sin·cos·sqrt·ln·max·min·atan2 등 이 도구가 아는 이름만 다룹니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.