출처 : sw expert academy 파이썬 SW문제해결 기본 - Stack2 1차시 01 계산기
🎇 중위표기식의 후위표기식으로 변환 방법1
1. 수식의 각 연산자에 대해서 우선순위에 따라 괄호를 사용하여 다시 표현
2. 각 연산자를 그에 대응하는 오른쪽 괄호의 뒤로 이동
3. 괄호 제거
A*B-C/D
1단계 : ((A*B)-(C/D))
2단계 : ((AB)*(CD)/)-
3단계 : AB*CD/-
🎨 스택을 이용한 중위표기식의 후위표기식으로 변환 방법2
1. 입력 받은 중위표기식에서 토큰(수식에서 의미 있는 최소의 단위)을 읽음
2. 토큰이 피연산자이면 토큰을 출력
3. 토큰이 연산자(괄호포함)일 경우
- 우선순위가 높으면 스택에 push
- 우선순위가 안높으면 연산자의 우선순위가 토큰의 우선순위보다 작을 때까지 스택에서 pop한 후 토큰의 연산자를 push
- 만약 top에 연산자가 없으면 push
4. 토큰이 오른쪽 괄호 ')'일 경우
- 스택 top에 왼쪽 괄호 '('가 올 때까지 스택에 pop연산을 수행
- pop한 연산자를 출력
- 왼쪽 괄호를 만나면 pop만 하고 출력하지는 않음.
5. 중위표기식에 더 읽을 것이 없다면 중지, 더 읽을 것이 있다면 1부터 반복
6. 스택에 남아 있는 연산자를 모두 pop하여 출력
- 스택 밖의 왼쪽 괄호는 우선 순위가 가장 높고, 스택 안의 왼쪽 괄호는 우선 순위가 가장 낮다.
🧨 eval(수식)
문자열로 된 수식을 계산.
올바른 수식이 아닌 경우 SyntaxError 발생
eval("6+5*(2-8)/2")
반응형
'Computer science > Algorithm' 카테고리의 다른 글
분할정복 (0) | 2021.01.14 |
---|---|
Backtracking (0) | 2021.01.14 |
Dynamic Programming Algorithm (0) | 2020.12.08 |
[파이썬] merge sort (0) | 2020.12.04 |
Recursive Algorithm(재귀 호출) (0) | 2020.12.04 |