최근 수정 시각 : 2024-09-27 18:40:51

혼합 계산

연산
Numbers and Operations
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#765432> 수 체계 자연수 (홀수 · 짝수 · 소수 · 합성수) · 정수 · 유리수 (정수가 아닌 유리수) · 실수 (무리수 · 초월수) · 복소수 (허수) · 사원수
표현 숫자 (아라비아 숫자 · 로마 숫자 · 그리스 숫자) · 기수법(과학적 기수법 · E 표기법 · 커누스 윗화살표 표기법 · 콘웨이 연쇄 화살표 표기법 ·BEAF· 버드 표기법) · 진법 (십진법 · 이진법 · 8진법 · 12진법 · 16진법 · 60진법) · 분수 (분모 · 분자 · 기약분수 · 번분수 · 연분수 · 통분 · 약분) · 소수 {유한소수 · 무한소수 (순환소수 · 비순환소수)} · 환원 불능 · 미지수 · 변수 · 상수
연산 사칙연산 (덧셈 · 뺄셈 · 곱셈 구구단 · 나눗셈) · 역수 · 절댓값 · 제곱근 (이중근호) · 거듭제곱 · 로그 (상용로그 · 자연로그 · 이진로그) · 검산 · 연산자 · 교환자
방식 암산 · 세로셈법 · 주판 · 산가지 · 네이피어 계산봉 · 계산기 · 계산자
용어 이항연산(표기법) · 항등원과 역원 · 교환법칙 · 결합법칙 · 분배법칙
기타 수에 관련된 사항 (0과 1 사이의 수 · 음수 · 작은 수 · 큰 수) · 혼합 계산 (48÷2(9+3) · 111+1×2=224 · 2+2×2) · 0으로 나누기(바퀴 이론) · 0의 0제곱 }}}}}}}}}

[[대수학|대수학
Algebra
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
이론
기본 대상 연산 · 항등식(가비의 이 · 곱셈 공식(통분 · 약분) · 인수분해) · 부등식(절대부등식) · 방정식(/풀이 · (무연근 · 허근 · 비에트의 정리(근과 계수의 관계) · 제곱근(이중근호 · 개방법) · 환원 불능) · 부정 · 불능) · 비례식 · 다항식 · 산술(시계 산술)
수 체계 자연수(소수) · 정수(음수) · 유리수 · 실수(무리수(대수적 무리수 · 초월수) · 초실수) · 복소수(허수) · 사원수 · 팔원수 · 대수적 수 · 벡터 공간
다루는 대상과 주요 토픽
대수적 구조
군(group) 대칭군 · 기본군 · 자유군 · 리 군 · 괴물군 · 점군 · 순환군 · 군의 작용 · 동형 정리 · 실로우 정리
환(ring) 아이디얼
체(field) 갈루아 이론 · 분해체
대수 가환대수 · 리 대수 · 불 대수(크로네커 델타)
마그마·반군·모노이드 자유 모노이드 · 가환 모노이드
선형대수학 벡터 · 행렬 · 텐서(텐서곱) · 벡터 공간(선형사상) · 가군(module) · 내적 공간(그람-슈미트 과정 · 수반 연산자)
정리·추측
대수학의 기본정리 · 나머지 정리 · 유클리드 호제법 · 부분분수분해 · PID 위의 유한생성 가군의 기본정리 · 산술·기하 평균 부등식 · 바이어슈트라스 분해 정리 · 호지 추측미해결 · 가환대수에서의 호몰로지 추측미해결
관련 하위 분야
범주론 함자 · 수반 · 자연 변환 · 모나드 · 쌍대성 · 토포스 이론 · 타입 이론
대수 위상수학 연속변형성 · 사슬 복합체 · 호몰로지 대수학(호몰로지 · 코호몰로지) · mapping class group · 닐센-서스턴 분류
대수기하학 대수다양체 · · 스킴 · 에탈 코호몰로지 · 모티브
대수적 정수론 타원곡선 · 디오판토스 방정식 · 유리근 정리 · 모듈러성 정리
가환대수학 스펙트럼 정리
표현론 실베스터 행렬
기타 및 관련 문서
수학 관련 정보 · 추상화 · 1학년의 꿈 · 노름 · 혼합계산 · 분배법칙 · 교환법칙 · 결합법칙 · 교재 }}}}}}}}}

1. 개요2. 계산 방법
2.1. 혼합 계산식의 변환2.2. 괄호가 있는 경우
2.2.1. 괄호를 먼저 계산하지 않아도 되는 경우
2.3. 논리식의 계산2.4. 행렬2.5. 집합의 연산
3. 컴퓨터에서의 처리
3.1. C언어에서3.2. Microsoft Excel에서3.3. 수식 트리를 이용한 혼합 계산
4. 관련 문서

1. 개요

/ combined operations[1]

우선순위가 다른 연산들이 뒤섞여 나오는 것.

대한민국 교육과정에서는 초등학교 5학년 때 처음 배우며[2], 중학교 1학년 때 정수와 유리수ㆍ거듭제곱이 섞인 혼합계산을 배운다. 고등학교 과정에서는 여러 가지 특수 연산자가 추가된 혼합 계산이 가끔씩 등장한다.[3]

한국어로 '혼합 계산'이라는 단어 자체는 존재하나 정의는 명확하게 되지 않았다. 현대의 대수학의 개념과 대한민국 교육과정 내용으로 유추해 보면, '우선순위가 다른 연산들이 뒤섞여 나오는 것'에 가깝다. 대표적인 사례는 사칙연산 중 곱셈/나눗셈에서 하나 이상, 덧셈/뺄셈에서 하나 이상이 나오는 것이다.[4]

정의가 되지 않은 단어라 하나의 식에 덧셈, 뺄셈, 곱셈, 나눗셈 가운데 두 종류 이상이 나오는 계산이라는 표현도 등장한다.

2. 계산 방법

우선순위는 다음과 같다.
괄호 > 하이퍼 연산 > 거듭제곱, 제곱근, 로그, 삼각식, 계승, 그 외 중등교육과정중고교에서 다루는 대부분의 연산자 > 곱셈, 나눗셈 > 덧셈, 뺄셈 > (함수)
대표적인 예시로, 작렬 정신통일의 전설의 짤방 〈두뇌 풀 가동!〉에 쓰인 2+2×2는 곱셈이 덧셈보다 우선순위가 높기 때문에 곱셈을 먼저하고 덧셈을 나중에 계산하므로 2+2×2=2+4=6이 된다.

거듭제곱 계산이 있을 경우 곱셈, 나눗셈보다 가장 먼저 계산한다. 제곱근도 사실상 거듭제곱의 역수만큼 제곱한 것과 같기 때문에 거듭제곱과 같은 우선순위를 가진다. 지수의 역연산인 로그 역시 마찬가지. 삼각식 역시 일종의 거듭제곱으로 볼 수 있으므로[5] 우선순위가 동일하다. 함수는 특성상 가장 나중에 계산하게 된다.[6] 켤레복소수는 괄호와 같다. 테트레이션과 같은 하이퍼 연산은 거듭제곱 및 제곱근보다 높은 연산이기 때문에 지수와 괄호 사이에 들어간다.

동등한 우선순위를 가지는 연산의 경우는 순서대로 계산하며 왼쪽에서 오른쪽으로 계산한다. 예를 들어 덧셈뺄셈만 있는 식은 왼쪽부터 놓인 순서대로 계산한다. 곱셈나눗셈만 있는 식도 동일하다. 단, 함수의 합성은 오른쪽에서 왼쪽으로 계산하므로 주의해야 한다.[7]

위의 순서가 특히 중요한 연산이 다름아닌 벡터, 그리고 행렬. 이 연산들은 교환법칙이 성립하지 않기 때문에, 순서가 틀릴 경우 그야말로 계산이 나락으로 빠져버린다.

2.1. 혼합 계산식의 변환

혼합 계산식을 다른 식으로 변환하여 계산을 편리하게 할 수 있다. 결합법칙과 분배법칙은 사칙연산 및 집합, 논리 연산에서 모두 적용된다. (a, b, c, x1, ..., xn, y1, ..., yn은 상수)
  • 결합법칙, 분배법칙
    • 결합법칙으로 괄호의 위치를 바꿀 수 있다는 것을, 분배법칙으로는 (a+b)×c뿐만 아니라 이 식에서 +를 -로, ×를 ÷로 바꾼 식의 변환도 설명할 수 있다.
  • 곱셈 공식, 인수분해 공식
  • 덧셈, 뺄셈이 복잡하게 섞여 있는 식은 교환법칙을 이용하여 다음과 같이 정리할 수 있다. x1+x2+...+xn-y1-y2-...-ym=(x1+x2+...+xn)-(y1+y2+...+ym)
  • a-(b-c)=a-b+c=(a+c)-b, a÷(b÷c)=a÷b×c=ac÷b
  • a-(x1+x2+...+xn)=a-x1-x2-...-xn
  • a-(x1+x2+...+xn-y1-y2-...-ym)=a-x1-x2-...-xn+y1+y2+...+ym=(a+y1+y2+...+ym)-(x1+x2+...+xn)(y1, ..., ym은 상수)
    • a에서 괄호의 식을 빼었으므로 괄호를 벗길 때 부호는 바뀐다는 의미룰 가진다. 거의 당연하다고 할 수 있다. 이때, 괄호 안에 +와 - 기호가 복잡하게 섞여 있는 경우, +에 해당하는 부분을 왼쪽에, -에 해당하는 부분을 오른쪽에 놓으면 이 식을 적용할 수 있다.
  • a÷(x1x2...xn÷y1÷y2÷...÷ym)=a÷x1÷x2÷...÷xn×y1y2...ym=(ay1y2...ym)÷(x1x2...xn)(y1, ..., ym은 상수)
    • 위 식에서 +를 ×로, -를 ÷로 바꾼 것이다.
  • a÷(x1x2...xn)=a÷x1÷x2÷...÷xn
  • (x1+x2+...+xn)-(y1+y2+...+yn)=(x1-y1)+(x2-y2)+...+(xn-yn)
    • xk-yk의 값이 일정하거나 0인 경우에는 이 방법으로 수식을 정리하면 편리하다. 이를 응용한 것 중 하나가 바로 망원급수이다.
  • (x1x2...xn)÷(y1y2...yn)=(x1÷y1)(x2÷y2)...(xn÷yn)
    • 분수의 곱셈 공식이 이를 응용한 것이라고 할 수 있다.
  • 드모르간 법칙 - 논리 연산, 집합 한정

2.2. 괄호가 있는 경우

괄호를 사용하는 경우, 위에서 언급된 어느 연산보다 가장 높은 우선순위로 계산한다. 예를 들어 2+2×2 = 6 이지만 (2+2)×2 인 경우는 괄호를 먼저 계산해서 8이 된다.

엄밀히 따지면, 모든 연산마다 일일이 다 괄호를 쳐야 맞지만, 표기의 편의상 괄호를 생략한 것 뿐이다. 실수 내에서 단순한 덧셈과 곱셈이라면 결합법칙이 성립하기에 괄호를 생략할 수 있게 된다. (a+b)+c = a+(b+c) 이기 때문에, 굳이 괄호를 표기할 필요 없이 a+b+c 로 표기한 것이다. 또한, 곱셈을 덧셈보다 먼저 계산한다는 약속이 있기 때문에 a + (b × c) 라고 굳이 쓸 필요 없이 a + b × c 로 표기할 수 있으며, 곱셈기호 마저 점만 찍거나 생략해서 a + b·c 로 쓰거나 a + bc 로 표현한다. 여기서 b와 c가 모두 기호가 아닌 수일 때는 점을 찍어서 표기할 수는 있지만 생략하지는 않는다.

수와 괄호로 묶인 식 사이에 곱셈 기호를 생략하는 것을 허용한다면 논란이 발생할 수 있다. 대표적인 사례가 바로 48÷2(9+3).

괄호가 여러 개 중첩된 경우 안에 있는 괄호를 먼저 푼다. 초등학교 수준에서는 편의상 소괄호 → 중괄호 → 대괄호 순서로 계산한다고 알려 주지만, 일반적으로 소괄호만 중첩해서 사용한다. 참고로, 대한민국의 수학 교육 과정에서는 소괄호-중괄호-대괄호 순의 위계질서가 있지만, 미국의 수학 교육 과정에서는 중괄호가 존재하지 않는다. 즉, 바로 소괄호 다음이 대괄호이다. 미국에서 중괄호는 수학이 아닌 프로그래밍 등의 분야에서 주로 쓴다.

전체 식 또는 괄호 안의 식에서, 괄호가 중첩되지 않으면서 여러 개 있는 경우 또는 중첩된 괄호를 풀어 그렇게 만든 경우에는 어떤 괄호를 먼저 계산하는지에 따라 결과값이 달라지지는 않지만 일반적으로 왼쪽에 있는 괄호부터 푼다.

2.2.1. 괄호를 먼저 계산하지 않아도 되는 경우

괄호가 있는 식에서 괄호를 먼저 계산하지 않아도 올바른 결과가 도출되는 경우도 있는데, 예를 들면 다음과 같다. 사칙연산의 경우는 다음과 같다.
  • 사칙연산 기호 중 덧셈만 있거나, 곱셈만 있는 경우: 덧셈과 곱셈은 결합법칙이 성립하므로 괄호의 위치를 변경해도 되고 아예 괄호를 없애도 된다.
  • 덧셈, 뺄셈 기호로 구분되는 항이 중간에 괄호 없이 2개 이상 연속되는 경우: 예를 들어 (6+3)×5+4+2(6+3)\times5+4+2의 경우, 5와 4 사이의 + 기호를 기준으로 왼쪽과 오른쪽을 서로 독립적으로 계산해도 되므로 4+24+2를 먼저 계산해도 된다. 여기서는 4, 2가 그 항이다.
    • 단, (괄호)-a+b(a, b는 상수) 식으로 구성된 경우, a+b를 먼저 계산하면 결과적으로 (괄호)-a-b가 되므로 계산이 틀리게 된다.
  • 괄호 부분과 괄호 밖의 곱셈식이 덧셈, 뺄셈 기호로 연결되어 있는 경우: 예를 들어 (1+2)×3+4×5(1+2)\times3+4\times5의 경우, 3과 4 사이의 + 기호를 기준으로 양쪽이 서로 독립적이므로 4×54\times5를 먼저 계산해도 된다.

후술할 Microsoft Excel에서의 혼합 계산 처리 방법에서도 이러한 경우에 왼쪽부터 계산해 나간다.

더 일반적인 경우로 확장하여, 두 연산 ☆, ◇에 대하여 ☆이 ◇보다 우선한다고 하면 아래 경우에는 괄호를 먼저 계산하지 않아도 된다.
  • ☆가 결합법칙이 성립하는 연산일 때, 식 내의 모든 연산 기호가 ☆인 경우
  • 괄호가 아닌 부분의 식과 괄호 부분의 식이 ◇로 연결된 경우. 예를 들어 1☆2◇3☆(4◇5)의 경우, 괄호 밖에 있는 1☆2를 먼저 계산해도 상관없다.

2.3. 논리식의 계산

논리합(OR)과 논리곱(AND)을 이용한 논리식의 계산에서는 논리 부정(NOT)을 하나의 연산으로 간주한다면 괄호 안의 부분 → 논리 부정 → 논리곱 → 논리합의 순서로 계산하며, 논리곱 기호를 생략할 수 있다. 예를 들어 A'B + AB'의 경우 굳이 괄호를 친다면 ((A')B)+(A(B')), 즉 (A' 그리고 B) 또는 (A 그리고 B')가 된다.

논리 부정이 논리곱보다 우선하기 때문에 일반적으로 A(B') = AB' ≠ (AB)' 이다.

드모르간 법칙을 이용하면 더 쉽게 계산할 수 있다. 즉 (AB)' = A'+B'이며 (A+B)' = A'B' 이다.

2.4. 행렬

행렬의 경우, 행렬 그 자체가 괄호의 역할을 겸하므로 행렬 내의 연산을 먼저 한다.

행렬의 혼합 계산 역시 수의 혼합 계산의 기본 원칙을 따르며, 이는 행렬과 수가 섞여 있는 혼합 계산에서도 마찬가지이다. 역행렬(-1), 전치(T), 수반연산(*)을 하나의 연산으로 간주한다면 곱셈보다 먼저 계산한다. 예를 들어 행렬 A, B에 대하여 AB-1은 AB의 역행렬이 아니라 A에 B의 역행렬을 곱한 것이다. 즉, A(B-1) = AB-1 ≠ (AB)-1 이다.

2.5. 집합의 연산

집합의 연산에서는 교집합(∩)과 합집합(∪)에 대한 우선 순위를 따로 정하지 않고 괄호로 묶는다. 그래서 분배법칙 등 집합의 연산법칙을 설명할 때 A ∩ (B ∪ C), A ∪ (B ∩ C)라는 표현이 모두 등장한다. 단 교집합, 합집합에 대한 결합법칙은 성립하므로 같은 연산을 여러 번 할 때는 괄호로 묶지 않아도 된다.

여집합(C)을 연산으로 간주한다면 교집합이나 합집합보다 우선한다. 예를 들어 두 집합 A, B에 대하여 A ∪ BC는 A와 B의 합집합의 여집합이 아니라 A와 BC(B의 여집합)의 합집합을 의미한다.

당연히 드모르간 법칙이 적용된다. (A ∪ B)C = AC ∩ BC 이며 (A ∩ B)C = AC ∪ BC 이다.

곱집합, 멱집합 같은 것까지 나올 경우 수와 마찬가지로 멱집합 > 곱집합 > 나머지 집합 연산 순으로 진행한다.

3. 컴퓨터에서의 처리

3.1. C언어에서

컴퓨터에서도 위와 같은 기본 원칙을 그대로 따른다. 그런데, C언어 같은 경우에는 덧셈, 곱셈 같은 산술 연산 뿐만 아니라 아래에 나열된 온갖 것을 '연산'으로 취급해서 정해진 우선 순위에 따라 처리하며, 아래에서 괄호부터 대입 연산자까지는 위쪽으로 갈수록 순위가 높다. 또한 같은 형태의 기호라도 어떻게 쓰이는지에 따라, 또는 어떤 위치에 있느냐에 따라 순위가 달라지기도 한다.

논리 연산자 중 &, &&는 논리곱, |, ||는 논리합이고 우선순위는 & > |, && > ||이다. 즉 논리곱과 논리합을 각각 사칙연산의 곱과 합에 대응시켜서 이해할 수도 있다.
  • 괄호 ()
  • 단항 연산자 ( ++ * ! + - ~ ): 기본적으로 sizeof, &(주소 기호)와 순위가 같다. ++, {{{}}}의 경우 a++, a--처럼 후위에 있다면 다른 단항 연산자보다 순위가 높다.
  • 산술 연산자 ( * / % + - ): *, /, %가 +, -보다 우선한다.
  • 비트 쉬프트 연산자 ( >> << )
  • 관계 연산자 (< > <= >= )
  • 비교 연산자 ( == != )
  • 비트 논리 연산자 ( & ^ | ): 우선순위는 & > ^ > |이다.
  • 논리 연산자 ( && ||): 우선순위는 && > ||이다.
  • 삼항 연산자 ? :
  • 대입 연산자 ( = += -= *= /= %= &= ^= |= 등)
  • 기타 : 배열 인덱스 [], sizeof, 포인터 ->, 구조체 . 등등, 게다가 C++ 에서는 더 추가되었다.
좀 더 자세한 내용은 영문 위키백과 참고.

이런 것들을 모두 '연산'으로 취급해서 그냥 하나의 식으로 만들 수 있다. 예를 들어
{{{ result = ( pa == NULL pb == NULL) ? -1 : ( ((pa->x - 10) * (pb->x + 20)) + ((pa->y >> 2) * (pb->y << 4)) ); }}}
과 같이 난해하게 식을 작성해도 문법상으로 문제만 없다면 얼마든지 표현 가능하다.

이런 이유로 복잡한 식을 아주 짧게 표현이 가능해진다는 장점이 있지만, 그만큼 난해한 식이 된다는 단점이 있다. 또한, 이렇게 정의해 버리는 경우 컴파일러 구현에도 장점이 있다 보니, C언어에 영향받은 다른 언어에서도 자연스럽게 똑같이 따라서 사용하고 있다.

3.2. Microsoft Excel에서

Microsoft Excel에서의 수식 연산 기호에 대해 설명하자면 다음과 같다.
덧셈, 뺄셈, 곱셈, 나눗셈 각각 +, -, *, /
거듭제곱 ^
괄호 소괄호만 사용한다. 중괄호({, })나 대괄호([, ])를 사용하면 오류가 발생한다.
비교 연산자 >=, >, <=, <, =, <>
혼합 계산이 있는 수식의 경우, 다음과 같은 규칙을 따른다. 수식을 입력한 후 수식 - 수식 계산 메뉴에서 순서를 직접 확인해 볼 수 있다.
  • 기본적인 우선 순위는 거듭제곱(^) > 곱셈, 나눗셈(*, /) > 덧셈, 뺄셈(+, -) > 비교 연산자이다. 비교 연산자를 사용하면 비교 결과에 따라 TRUE(참) 또는 FALSE(거짓)가 된다.
    • 단, 가장 왼쪽에 우선 순위가 낮은 연산자가 2개 이상 연속되는 경우 그것을 먼저 계산한다. 예를 들어 =2+2+3*3의 경우 계산 순서는 2+2 → 4+3*3에서 3*3 → 4+9이다.
  • 괄호가 있는 경우, 왼쪽에 덧셈, 뺄셈 기호으로 연결된 괄호가 없는 2개 이상의 항이 있으면 왼쪽부터 계산한다. 그렇지 않은 경우는 괄호를 왼쪽부터 계산한다.
    • 예를 들어 =1+2+(3+4)의 경우 계산 순서는 괄호를 먼저 계산하는 것이 아니라, 앞의 1+2=3 → 3+(3+4)에서 (3+4)=(7) → 3+(7)=10이다.
    • 다른 예를 들어 보면 =1+2*(3+4)의 경우 앞의 1+2를 먼저 계산할 수 없기 때문에 괄호 안의 (3+4)부터 계산한다.
이 규칙에 따라 다음 식을 계산해 보자.
=1+(2+3)*4>1+5*6^2
순서는 다음과 같다.
계산 설명
1+(2+3)*4>1+5*6^2 왼쪽에 항이 1 하나뿐이므로 괄호를 먼저 계산한다.
1+5*4>1+5*6^2 덧셈보다 곱셈을 먼저 계산한다.
1+20>1+5*6^2 가장 왼쪽에 있는 덧셈을 한다.
21>1+5*6^2 곱셈보다 거듭제곱을 먼저 계산한다.
21>1+5*36 덧셈보다 곱셈을 먼저 계산한다.
21>1+180 비교 연산자보다 덧셈이 우선하므로 덧셈을 계산한다.
21>181 마지막으로 남은 비교 연산을 한다. 결과는 FALSE이다.

단순한 수식 기호뿐만 아니라 여러 종류의 함수를 한 식에서 사용하거나 수식과 함수를 조합하는 것도 넓은 의미에서 혼합 계산이라고 할 수 있다.

3.3. 수식 트리를 이용한 혼합 계산

파일:혼합계산1.png
혼합 계산을 위와 같이 이진 트리 구조로 나타낼 수도 있는데, 이것을 수식 트리(Expression Tree, Parse Tree)라고 한다. 수식 트리를 중위 순회 방법으로 순회하여 방문한 각 노드의 내용을 차례대로 쓰고, 하위 노드가 있는 각 노드에 대하여 그 노드와 하위 노드에 해당하는 내용을 괄호로 묶으면 계산식이 된다. 예를 들어 위와 같은 경우, 계산식은 (2+(1*2))*(3+(2*4))가 된다. 즉, 혼합 계산식에서의 괄호가 위의 트리 구조에서 하위 노드가 있는 각 노드에 해당하는 것이다. 단, 여기서 (1*2), (2*4)의 괄호처럼 일부 괄호를 생략해도 수학적으로 올바른 계산식이 도출될 수 있다.

수식 트리의 주요 특징은 다음과 같다.
  • 리프 노드(leaf node)가 아닌 노드에는 연산 기호가 들어간다.
  • 리프 노드에는 숫자나 문자 등 피연산자가 들어간다.

수식 트리를 후위 순회한 결과로 나온 문자열을 스택을 이용하여 수식처럼 계산할 수 있다. 예를 들어 위와 같은 경우에는 후위 순회한 결과가 212*+324*+*인데, 다음과 같은 규칙을 이용한다.
  • 수식의 왼쪽부터 한 문자씩 탐색한다.
  • 탐색한 문자가 피연산자이면 그것을 스택에 push한다.
  • 탐색한 문자가 연산 기호이면 스택에서 2번 연속 pop하고, 그 값을 각각 a, b라 하자. a와 b를 그 연산 기호로 연산한 값을 push한다. 여기서 pop의 순서는 b → a가 되어야 한다는 점에 주의해야 한다.
  • 마지막에는 스택에 하나의 값이 남는데, 그 값이 바로 결과값이다.
이 방법으로 212*+324*+*를 계산하면 다음과 같다.
<rowcolor=#008000> 탐색하는 문자 설명 스택
2 숫자이므로 push 2
1 2 1
2 2 1 2
* 2번 연속 pop 후 1*2=2를 push 2 2
+ 2번 연속 pop 후 2+2=4를 push 4
3 숫자이므로 push 4 3
2 4 3 2
4 4 3 2 4
* 2번 연속 pop 후 2*4=8를 push 4 3 8
+ 2번 연속 pop 후 3+8=11을 push 4 11
* 2번 연속 pop 후 4*11=44를 push 44
여기서 스택에는 마지막에 하나의 값만 남아야 하고, 숫자를 만날 때마다 스택의 항목 수가 1 증가하고, 연산 기호를 만날 때마다 1 감소하므로 수식에서 숫자의 개수는 (연산 기호의 개수+1)이어야 한다는 것을 알 수 있다. 또한 왼쪽부터 문자를 탐색하면서 만난 숫자의 개수가 연산 기호의 개수보다 같거나 많은 적이 없어야 한다.

이 방법을 사용하면 모든 종류의 이항연산자를 동일한 방식으로 취급할 수 있다. 다만, 단항연산자(논리 부정, 여집합 등등)이나 삼항 연산자 등을 처리하기 위해서는 이를 수정해서 사용해야 한다.

4. 관련 문서


[1] 영어로 검색하면 군대의 연합작전이 나오므로, math를 붙여야 한다. mixed operations라는 용어로는 거의 나오지 않는다.[2] 초등 교육과정에서는 괄호를 연산이라기보다는 집합처럼 취급한다. 과거 7차 개정 과정까지만 해도 4학년 때 배웠다.[3] 물론 이때는 곱셈 공식, 인수분해 공식, 지수법칙, 로그의 덧셈정리 등을 자주 이용해야 보다 수월하게 풀 수 있는 경우가 많다.[4] 뺄셈은 덧셈에서, 그리고 나눗셈은 곱셈에서 파생되며, 우선순위가 각각 같다.[5] [math({\displaystyle \cos x=\frac{e^{ix}+e^{-ix}}{2}})], [math({\displaystyle \sin x=\frac{e^{ix}-e^{-ix}}{2i}})][6] 중등 교육과정의 함수는 모두 괄호와 함께 쓰이니 큰 상관이 없다.[7] 이게 '~의 ~의'라는 문장 수식 구조를 영어 어순대로 옮긴 것이기 때문이다. 아무래도 수식 표기법이 서양에서 체계화되고 표준화되었으니...