1
부터 시작하므로 1
부터 탐색📌 더욱 간단하게 구현이 가능했지만 연산자 관련 문제는 모기업 순차적 알고리즘 코테에서 크게 당해봤기 때문에 수정이 용이하도록 풀어봄
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
사칙연산으로 구성되어 있는 식은 이진 트리로 표현할 수 있다. 아래는 식 “(9/(6-4))*3”을 이진 트리로 표현한 것이다.
임의의 정점에 연산자가 있으면 해당 연산자의 왼쪽 서브 트리의 결과와 오른쪽 서브 트리의 결과를 사용해서 해당 연산자를 적용한다.
사칙연산 “+, -, *, /”와 양의 정수로만 구성된 임의의 이진트리가 주어질 때, 이를 계산한 결과를 출력하는 프로그램을 작성하라.
단, 중간 과정에서의 연산은 실수 연산으로 하되, 최종 결과값이 정수로 떨어지지 않으면 정수부만 출력한다.
def numeric_node(node_info, node_num):
return int(node_info.get(node_num)[0])
def operator_node(node_info, node_num):
operator, node1, node2 = node_info.get(node_num)
node1, node2 = int(node1), int(node2)
if len(node_info[node1]) != 1:
node1 = operator_node(node_info, node1)
else:
node1 = numeric_node(node_info, node1)
if len(node_info[node2]) != 1:
node2 = operator_node(node_info, node2)
else:
node2 = numeric_node(node_info, node2)
if operator == '+':
return node1 + node2
elif operator == '-':
return node1 - node2
elif operator == '*':
return node1 * node2
else:
return node1 // node2
for tc in range(1, 11):
N = int(input())
node_info = dict()
for _ in range(N):
tmp_info = list(map(str, input().split()))
node_info[int(tmp_info[0])] = tmp_info[1:]
answer = operator_node(node_info, 1)
print(f'#{tc} {answer}')
설명 깔끔하네요!! 감사합니다 ㅎㅎ