-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
3. 후위 표기식 만들기
22.11.05 16:34 작성 조회수 232
0
코드는 간략하게 필요한 부분만 쓰겠습니다.
for x in a:
1. if x.isdecimal():
res+=x
else:
2. if x=='(':
stack.append(x)
3. elif x=='*' or x=='/':
while stack and (stack[-1]=='*' or stack[-1]=='/'):
res+=stack.pop()
stack.append(x)
4. elif x=='+' or x=='-':
while stack and stack[-1]!='(':
res+=stack.pop()
stack.append(x)
5. elif x==')':
while stack and stack[-1]!='(':
res+=stack.pop()
stack.pop()
질문
3+5*2/(7-2) 에서
가장 앞에 있는 +는 1, 2, 3, 4, 5 중에 어디에 들어 나가요?
정리
x=3은 숫자이므로 1번 res에 들어갑니다.
x= "+"일 때 (현재 stack은 텅 비어 있는 상태)
+는 else:에 들어 갑니다.
+는 '(' 가 아니므로 2번 pass
+는 * 또는 /가 아니므로 3번 pass
+는 +에 해당 하나 while stack 에서 stack에 데이터가 없으므로 while 조건 탈락 -> 4번 pass
+는 ) 가 아니므로 5번 pass
코드 짜려고 구성했을 때 가장 먼저 막히는 것이
비어 있는 stack에 첫 연산자를 어떻게 집어 넣느냐 였습니다.
부득이하게 들여쓰기가 안되는 점은 양해를 구합니다.
답변을 작성해보세요.
0
김태원
지식공유자2022.11.10
안녕하세요^^
가장 앞에 있는 + 연산자는 4번에 해당합니다.
4. elif x=='+' or x=='-':
while stack and stack[-1]!='(':
res+=stack.pop()
stack.append(x)
가장 앞에 있는 + 연산자를 만났을 때, 위에 while문에서 현재 스택이 비어있으므로 while stack 문이 거짓이 되어 while문은 바로 멈춰버립니다. stack은 비어있으면 false입니다.
while문이 바로 멈추고 stack.append(x) 를 하니까 빈 스택에 + 연산자가 들어가는 것입니다.
답변 1