Computer science/Algorithm

계산기

잔망루피 2021. 1. 14. 18:33

출처 : 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