우선순위 계산기

아직 제출이 없습니다시간 제한1.5초메모리 제한1024 MB

문제

국렬이는 두 번씩이나 계산기 문제를 내놓고 또 계산기 문제를 냈다. 이대로라면 죽을 때까지 계산기를 우려먹을 생각이고, 당신은 귀찮지만 상금을 얻기 위해서 주어진 수식을 규칙에 맞게 계산해야 한다.

입력으로 주어지는 수식은 띄어쓰기 없이 수와 연산자가 번갈아 가면서 나온다. 수식의 ii번째 수를 X_iX\_i, ii번째 연산자를 Op_iOp\_i로 표시하면 수가 nn개인 식을 X_1X\_1 Op_1Op\_1 X_2X\_2 Op_2Op\_2 ... Op_n1Op\_{n-1} X_nX\_n로 표기할 수 있다. 연산자의 종류는 +-*/가 있다. 마지막에 연산자가 있는 경우와 X_iX\_i가 음수인 경우는 입력으로 주어지지 않는다. 즉, 11-1-1, 2+32+-3 같은 경우는 입력으로 주어지지 않는다. 그리고 불필요한 00이 수의 앞에 있을 수 있다. 즉, 001+0002001+0002 같은 수식이 입력으로 주어질 수 있다.

주어진 수식을 다음 규칙에 맞게 계산할 것이다.

  1. X_iX\_i Op_iOp\_i X_i+1X\_{i+1} 중 가장 큰 값을 갖는 ii를 선택한다. (1in11 \le i \le n-1)
  2. X_iX\_i Op_iOp\_i X_i+1X\_{i+1}가 가장 큰 값을 갖는 ii22개 이상인 경우, 연산자 우선순위가 높은 Op_iOp\_iii를 먼저 선택한다. 연산자의 우선순위는 곱셈과 나눗셈이 덧셈과 뺄셈보다 앞선다.
  3. X_iX\_i Op_iOp\_i X_i+1X\_{i+1}가 가장 큰 값을 갖고 연산자 Op_iOp\_i의 우선순위가 같은 ii22개 이상인 경우, ii가 가장 작은 것을 선택한다.
  4. X_iX\_i Op_iOp\_i X_i+1X\_{i+1}를 먼저 계산하고, 위의 과정을 연산자의 개수만큼 반복한다.

예를 들어서 수식이 3× 2+5 5+73 \times 2 + 5 - 5 + 7로 주어진다고 하면 다음과 같이 계산된다.

  • 5+7=125 + 7 = 12가 가장 크기에 먼저 계산한다. 이후 계산식은 3× 2+5 123 \times 2 + 5 - 12이다.
  • 그다음으로 2+5=72 + 5 = 7를 계산한다. 이후 계산식은 3× 7 123 \times 7 - 12이다.
  • 그 후 3× 7=213 \times 7 = 21를 계산한다. 이후 계산식은 21 1221 - 12이다.
  • 마지막에 남은 211221 - 12를 계산하면 최종 결과 값은 99가 된다.

이 문제에서의 나눗셈은 C++에서 정수 간에 정의된 나눗셈으로 생각한다. 즉, 나누어지는 수가 양수면 나머지가 00 이상, 음수면 나머지가 00 이하로 처리가 되는 식으로 진행했을 때 나오는 몫을 계산하는 방식으로 이루어진다. 예를 들어, 3/2=13 / 2 = 1(3)/2=1(-3) / 2 = -1, 3/(2)=13 / (-2) = -1, (3)/(2)=1(-3) / (-2) = 1로 계산된다.

이와 같은 계산 과정에 따라 주어진 식을 계산하시오.

입력

다음과 같이 입력이 주어진다.

SS

출력

첫 번째 줄에 주어진 식을 계산한 결과 값을 출력한다. 불필요한 00은 제거해야 한다.

제한

  • SS는 계산하고자 하는 수식으로 지문에서 언급된 수와 연산자가 다른 문자 없이 교대로 나오며, 길이는 200,000200\\,000 이하이다.
  • 계산 과정 중의 모든 수는 263-2^{63} 이상 2632^{63} 미만이며, 00으로 나누는 경우는 없다. 수 앞에 불필요한 00이 있을 수 있다.
  • 주어지는 연산자는 +-*/다.