4291 - 연습 4.4 스택 연산 명령어 다루기

Time Limit: 1s Memory Limit: 128MB

Submissions: 556 Solved: 287
Description

본 문제는 연습문제 4.3의 확장판 입니다. 4.3을 풀지 못한 학생 여러분들은 월요일 7시 help session을 적극 권장드립니다. 혹은 정보관 1층의 라운지에서 선배들의 지식을 약탈해보세요.

이번 문제에서는 스택 자료구조를 다루는 몇가지 연산이 추가된 역 폴란드 수식을 계산해 봅시다.

추가된 연산은 다음과 같습니다.

* ? (pop&print) : 스택의 가장 위에 있는 값을 pop 한 후 출력

* & (duplicate) : 스택의 가장 위에 있는 값을 2개로 복제

* ~ (swap) : 스택의 상위 2개 값의 위치를 서로 바꿈

Input
  • * Line 1 : 문자열 S
    • - S : Polish notation string + Stack operators
    • Stack operators
      • ? : Pop and Print
      • ~ : Swap top 2 element (e.g. 30 20 ~ => 20 30)
      • d : duplicate top element (e.g. 30 d => 30 30)
    • 최대 100글자
Output
  • * Line 1 : 공백으로 구분되는 자연수 출력 문자열 (e.g. 30 20)
    • 각 자연수는 32bit의 int 범위 이내 값
Sample Input
1 5 + 30 & 66 & ? - + ~ & + ?
Sample Output
66 12
Hint

4.3과 다르게 최종 값을 출력하지 않습니다. ? 연산이 들어올때만 출력해야 되요.

1 5 + 30 & 66 & ? - + ~ & + ?
-------------------
1
1 5
1 5 +
6 30 &			30 duplicate
6 30 30
6 30 30 66 &
6 30 30 66 66
6 30 30 66 66 ?		66 pop & print
6 30 30 66 -
6 30 -36 +
6 -6 ~			6 -6 swap
-6 6 &			6 duplicate
-6 6 6 +
-6 12 ?			12 pop & print
-6