문제 설명
이진 트리를 사용하여 수식을 다음과 같이 표현하였다.
- 이진트리의 각 노드는 연산자 또는 피연산자를 저장한다.
- 트리의 리프 노드는 피연산자를 저장한다.
- 트리의 내부 노드는 연산자를 저장한다.
이렇게 표현된 수식을 수식 트리(ex
- 현재 노드가 연산자라면, 왼쪽 자식 노드, 연산자, 오른쪽 자식 노드 형태의 수식을 생성하여 계산한다.
- 자식 노드가 연산자라면 자식 노드를 현재 노드로 하여 1의 연산을 수행 후 계산한다.
예를 들어 다음과 같이 표현된 수식이 있다고 생각해보자.
여기에서 이 수식 트리는 완전 이진트리로 표현이되며 배열의 형태로 표현한다. 트리의 exp[i]는 배열의 i번 째 요소임을 나타낸다. 따라서 이 수식은 * + 3 3 2 순서로 배열에 저장된다.
루트 노드에 있는 *은 연산자이기 때문에, 이 노드의 왼쪽 자식과 오른쪽 자식을 피연산자로 연산을 하여야 한다. 하지만 왼쪽 자식이 + 연산자익기 때문에 이 노드를 현재 노드로 하여 그의 자식 노드 3과 2를 먼저 계산한다. 이렇게 3 + 2의 계산을 수행한 결과를 얻은 후, 최종적으로 * 연산자의 오른쪽 자식 노드인 3과 함께 5 * 3을 계산하여 최종 결과 15를 얻는다.
입력 설명
첫 번째 줄에는 노드의 수(N)이 입력된다.
수식 트리의 각 노드 값이 공백을 기준으로 루트 노드에서부터 순서대로 입력된다.
출력 설명
수식 트리를 계산한 결과값을 출력한다.
단, 연산은 정수형으로 이루어지며, 연산 결과 역시 정수형이다.
입력 예시 Copy
5
* + 3 3 2
출력 예시 Copy
15