Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 주어진 스택 연산을 수행하여 최종 답변을 확인하는 프로그램

<시간/>

각 요소가 아래와 같은 작업 중 하나인 ops라는 문자열 목록이 있다고 가정합니다. -

  • 스택에 푸시될 음이 아닌 정수 값
  • 스택에서 최상위 요소를 삭제하는 "POP"
  • 맨 위 요소를 스택에 다시 삽입하여 중복되도록 "DUP"
  • "+":상위 두 요소를 표시하고 합계 값을 푸시합니다.
  • "-"는 상위 두 요소를 표시하고 (상단 요소 - 상단 바로 아래 요소)의 결과를 푸시합니다.

따라서 이러한 모든 작업을 적용한 후 스택에서 최상위 mot 요소를 찾아야 합니다. 일부 작업이 유효하지 않으면 -1을 반환합니다.

따라서 입력이 ops =["5", "2", "POP", "DUP", "3", "+", "15", "-"]인 경우 출력은 7이 됩니다. 처음에 처음 두 연산을 사용하여 스택이 [5, 2]와 같도록 5와 2를 삽입한 다음 현재 스택이 [5]와 같도록 하나를 팝합니다. 그 후 DUP의 경우 5가 복제되므로 스택은 [5, 5]와 같으며 3을 추가한 다음 [5, 5, 3]을 추가한 다음 추가 작업의 경우 [5, 8]이 되고 15를 삽입하므로 [5, 8, 15] 그 후 빼기 연산의 경우 스택은 [5, (15-8)] =[5, 7]이 됩니다. 따라서 최상위 요소는 7입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 스택 :=새 스택
  • 작업의 각 i에 대해 다음을 수행합니다.
    • i가 숫자이면
      • 나를 스택에 푸시
    • 그렇지 않으면 스택의 크기>=1이고 i가 "POP"이면
      • 스택에서 맨 위 요소 팝
    • 그렇지 않으면 스택의 크기>=1이고 i가 "DUP"과 같으면
      • 스택의 최상위 요소를 p로 팝
      • p를 두 번 삽입
    • 그렇지 않으면 스택의 크기>=2이고 i가 "+"와 같으면
      • 스택에서 최상위 요소를 팝핑
      • 스택의 최상위 요소를 b로 팝
      • 스택에 (a + b) 푸시
    • 그렇지 않으면 스택의 크기>=2이고 i가 "-"와 같으면
      • 스택에서 최상위 요소를 팝핑
      • 스택의 최상위 요소를 b로 팝
      • 스택에 (a - b) 푸시
    • 그렇지 않으면
      • 반환 -1
  • 스택에서 최상위 요소 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(ops):
   stack = []
   for i in ops:
      if i.isnumeric() == True:
         stack.append(int(i))
      elif len(stack) >= 1 and i == "POP":
         stack.pop()
      elif len(stack) >= 1 and i == "DUP":
         p = stack.pop()
         stack.append(p)
         stack.append(p)
      elif len(stack) >= 2 and i == "+":
         a = stack.pop()
         b = stack.pop()
         stack.append(a + b)
      elif len(stack) >= 2 and i == "-":
         a = stack.pop()
         b = stack.pop()
         stack.append(a - b)
      else:
         return -1
   return stack.pop()

ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"]
print(solve(ops))

입력

["5", "2", "POP", "DUP", "3", "+", "15", "-"]

출력

7