수식을 표현하는 방법 |
- 보통 일반적인 식은 숫자나 문자로 이루어진 피연산자(Operand)와 +, -, x, / 와 같은 연산자(operator) 그리고 괄호로 구성되어 있다. 이들로 이루어진 식을 표기하는 방법은 다음과 같다.
- 중위(infix) 표기법 : 피연산자 사잉에 연산자를 쓴다. ex) 1 + 2, 3 x 4
- 후위(postifix) 표기법 : 피연산자 뒤에 연산자를 쓴다. ex) 1 2 + , 3 4 x
- 전위(prefix) 표기법 : 피연산자 앞에 연산자를 쓴다. ex) + 1 2, x 3 4
후위표기법의 장점 |
- 괄호가 필요없다.
- 연산자 우선순위를 고려할 필요가 없다.
- 앞에서부터 차례대로 계산하면 되기 때문에 계산이 편리하다.
중위표기식을 후위표기식으로 변환하기 |
- 계산하는 순서대로 따라가면서 연산자의 위치를 피연산자 뒤로 옮겨준다.
[ 예를 들어 ]
- 4 x 5를 먼저 계산하므로 이를 4 5 x 로 바꾸어준다.
- 그럼 이젠 3 + ' 4 5 x '가 되므로 +를 두 피연산자 뒤로 옮겨주면 3 4 5 x + 가 된다.
- 따라서 중위표기식 3 + 4 x 5를 후기표기법으로 표현한 식을 3 4 5 x + 가 된다.
[ 문제1 ] 다음 중위표기식을 후위표기식으로 바꾸시오.
① A + B - C
② A - B x C + D
③ (A - B) x (C + D)
④ A x (B + C) x D
⑤ (A + B) x (C - D) + E / F
⑥ A + ( ( (B - C) x (D - E) - G / H)
후기표기식을 계산하는 방법 |
- 후기 표기식 3 4 5 x + 는 다음과 같이 계산합니다.
★ 스택을 이용하여 해결할 수 있습니다.
- 피연산자가 나오는 경우 스택에 push 한다.
- 연산자가 나오는 경우 스택에서 2개의 피연산자를 꺼내 계산한 뒤 그 결과를 다시 스택에 집어넣는다.
[ 문제2 ] 다음 주어진 후위표기식을 계산하세요.
① 6 2 3 + -
② 3 2 1 3 + x 5 4 - + x
중위표기식을 후위표기식을 바꾸는 알고리즘(스택) |
- 수식을 앞에서부터 차례대로 살펴간다.
- 피연산자가 나오면 그대로 결과 문자열(또는 배열)에 차례대롤 저장한다.
- 연산자가 나오는 경우 나온 연산자보다 우선순위가 같거나 높은 연산자가 stack의 top에 있을 경우 pop시켜 결과 문자열에 저장한다. 더 이상은 자신보다 우선순위가 같거나 높은 연산자가 stack의 top에 없을 때까지 이 작업을 반복한 후 나온 연산자를 push 한다.
- 여는 괄호가 '('가 나오는 경우 스택에 그냥 push 한다.
- 닫는 괄호가 ')'가 나오는 경우 '('가 나올 때까지 stack에서 연산자를 pop시켜 결과 문자열로 저장한다.
- 수식을 다 살펴 보았다면 스택에 담긴 연산자들을 모두 pop시켜 결과 문자열 뒤에 저장한다.
- 이와 같은 작업을 반복하면 후위표기식을 얻을 수 있다.
◆ 이 방법으로 A x (B - C) + D를 계산해 보면
[ 문제3 ] 위 알고리즘을 사용하여 다음 중위표기식을 후위표기식으로 바꾸시오.
① A - ( B + C ) x D
② (A + B) x (C - D) + E / F
③ A + ((B - C) x (D - E) + F)
④ (A + B) - (C x D) + F
⑤ ( A * B + C ) *D + F 후위표기식 : A B x C + D x F +
C언어 수식계산(스택) - 후위 표기식 |
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식
www.acmicpc.net
[ 백준 1918 후위 표기식 예제 ]
입력 : ( A * B + C ) *D + F
후위표기식 결과 : A B x C + D x F +
C언어 수식계산(스택) - 할 수 있다 |
1287번: 할 수 있다
곱하기가 연산자 우선순위가 빠르므로 5+(1+2)*3 = 5+3*3 = 5+9 = 14가 된다. 연산자의 우선순위는 다음과 같다. (), */, +- 여기서 *와 /가 연산자 우선순위가 같고, +와 -가 연산자 우선순위가 같다. ()가
www.acmicpc.net
C언어 수식계산(스택) - 계산기 프로그램 |
5613번: 계산기 프로그램
입력의 각 줄에는 숫자와 +, -, *, /, =중 하나가 교대로 주어진다. 첫 번째 줄은 수이다. 연산자의 우선 순위는 생각하지 않으며, 입력 순서대로 계산을 하고, =가 주어지면, 그때까지의 결과를 출
www.acmicpc.net
C언어 수식계산(스택) - 사칙연산 |
13420번: 사칙연산
사칙연산은 덧셈, 뺄셈, 곱셈, 나눗셈으로 이루어져 있으며, 컴퓨터 프로그램에서 이를 표현하는 기호는 +, -, *, / 와 같다. 아래는 컴퓨터 프로그램에서 표현한 사칙 연산의 예제이다. 3 * 2 = 6 문
www.acmicpc.net
C언어 수식계산(스택) - 계산문제 |
2054번: 계산 문제
한 초등학교 선생님이 학생들을 위한 계산 문제를 만들고 있었다. 특히 이 선생님은 답이 같지만 문제는 다른 경우를 매우 좋아한다. 그래서 어느 날에는 답이 2,000이 되는 계산 문제들을 열심히
www.acmicpc.net
'C언어 자료구조' 카테고리의 다른 글
[우선순위 큐 1일차] - 9문제 (0) | 2021.02.25 |
---|---|
[우선순위 큐 2일차] - 9문제 (0) | 2021.02.22 |
[그래프 - 위상정렬 1일차] - 7문제 (0) | 2021.02.18 |
[그래프 - 깊이 우선 탐색(DFS)] - 15문제 (0) | 2021.02.16 |
[그래프 - 너비 우선 탐색(BFS)] - 19문제 (0) | 2021.02.16 |