• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

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에 첫 연산자를 어떻게 집어 넣느냐 였습니다.

부득이하게 들여쓰기가 안되는 점은 양해를 구합니다.

 

답변 1

답변을 작성해보세요.

0

안녕하세요^^

가장 앞에 있는 + 연산자는 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) 를 하니까 빈 스택에 + 연산자가 들어가는 것입니다.

등잔 밑에 어두웠습니다. 답변 감사합니다. 목에 있던 고구마다 쑤욱 내려가는 가는 느낌입니다.