강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

똑같이썼는데안돼님의 프로필 이미지
똑같이썼는데안돼

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

3. 후위 표기식 만들기 : infix-->postfix (스택)

3. 후위 표기식 만들기

작성

·

353

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

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

똑같이썼는데안돼님의 프로필 이미지
똑같이썼는데안돼

작성한 질문수

질문하기