문제2026--수식 계산

2026: 수식 계산

[만든사람 : ]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

이진 트리를 사용하여 수식을 다음과 같이 표현하였다.


  • 이진트리의 각 노드는 연산자 또는 피연산자를 저장한다. 
  • 트리의 리프 노드는 피연산자를 저장한다.
  • 트리의 내부 노드는 연산자를 저장한다. 


이렇게 표현된 수식을 수식 트리(expression Tree)라 부르자. 계산할 때에는 다음과 같은 절차에 따라 계산한다. 


  1. 현재 노드가 연산자라면, 왼쪽 자식 노드, 연산자, 오른쪽 자식 노드 형태의 수식을 생성하여 계산한다. 
  2. 자식 노드가 연산자라면 자식 노드를 현재 노드로 하여 1의 연산을 수행 후 계산한다.

예를 들어 다음과 같이 표현된 수식이 있다고 생각해보자.

여기에서 이 수식 트리는 완전 이진트리로 표현이되며 배열의 형태로 표현한다. 트리의 exp[i]는 배열의 i번 째 요소임을 나타낸다. 따라서 이 수식은 * + 3 3 2 순서로 배열에 저장된다.


루트 노드에 있는 *은 연산자이기 때문에, 이 노드의 왼쪽 자식과 오른쪽 자식을 피연산자로 연산을 하여야 한다. 하지만 왼쪽 자식이 + 연산자익기 때문에 이 노드를 현재 노드로 하여 그의 자식 노드 3과 2를 먼저 계산한다. 이렇게 3 + 2의 계산을 수행한 결과를 얻은 후, 최종적으로 * 연산자의 오른쪽 자식 노드인 3과 함께 5 * 3을 계산하여 최종 결과 15를 얻는다.





입력 설명

첫 번째 줄에는 노드의 수(N)이 입력된다. 수식 트리의 각 노드 값이 공백을 기준으로 루트 노드에서부터 순서대로 입력된다.

출력 설명

수식 트리를 계산한 결과값을 출력한다. 단, 연산은 정수형으로 이루어지며, 연산 결과 역시 정수형이다.

입력 예시 Copy

5
* + 3 3 2

출력 예시 Copy

15 

게시판

작성자제목(댓글)
글이 없습니다.

출처/분류