3+5*2/(7-2)를 후위식으로 바꿔보면
연산자와 숫자를 분리해서
우선순위를 찾을 tmp와 답을 기록할 res를 만든다
연산자 우선순위 규칙
1.괄호가 첫번째 이고
2.곱하기 나누기가 두번째이고
3.더하기나 빼기가 마지막이다
4.같은 우선순위의 연산자를 만나면 왼쪽이 우선한다
방법
리스트의 길이만큼 포문을 돌면서
숫자를 만나면 res에 누적하고
연산자를 만나면 tmp에 쌓아뒀다가
우선순위가 낮은 연산자를 만나면 res에 누적한다
ex)3+5*2/(7-2)
1회 3
후위표기식이니까 숫자를 만나면 바로 res에 넣는다
tmp res 3
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2회 +
우선순위를 찾기위해 +를 tmp에 넣는다
tmp + res 3
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
3회 5
숫자니까 res에 넣는다
tmp + res 35
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
4회 *
우선순위를 찾기위해 *를 tmp에 넣는다
tmp +* res 35
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
5회 2
숫자니까 res에 넣는다
tmp +* res 352
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
6회 /
왼쪽에 있는 *가 우선순위가 높으니까
res에 누적하고 tmp에 /를 넣는다
tmp +/ res 352*
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
7회 (
괄호는 첫번째 우선순위다
여는괄호를 만나면 tmp에 넣어뒀다가
닫는괄호를 만나면 앞의 연산자를 모두 연산처리 한다
tmp +/( res 352*
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
8회 7
7은 숫자니까 res에 넣는다
tmp +/( res 352*7
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
9회 -
두번째 연산순위 -는 tmp에 넣고
닫는괄호가 나올때 까지 누적한다
tmp +/(- res 352*7
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
10회 2
2는 숫자니까 res에 넣는다
tmp +/( res 352*72
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
11회 )
닫는괄호를 만나면 여는괄호를 만날때까지 팝하고
그 사이의 연산자들을 res에 누적
tmp +/ res 352*72-
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
여는괄호~닫는괄호를 다 처리하고 스택에 남은것을 res에 누적
tmp res 352*72-/+
꿈★은 이루어진다
내일채움공제 되는 중소기업 가자 화이팅!
댓글 0