[Programmers/프로그래머스] 2019 KAKAO BLIND RECRUITMENT [코딩테스트]
- [Lv. 2] 오픈채팅방
- [Lv. 1] 실패율
- [Lv. 2] 후보키
- [Lv. 4] 무지의 먹방 라이브
- [Lv. 3] 길 찾기 게임
- [Lv. 3] 매칭 점수
- [Lv. 4] 블록 게임
📌 문제



📝 제한사항

💻 입출력 예

📖 입출력 예에 대한 설명

📌 풀이
def preorder(tree, root, result):
result.append(root)
if tree[root][2]:
result = preorder(tree, tree[root][2], result)
if tree[root][3]:
result = preorder(tree, tree[root][3], result)
return result
def postorder(tree, root, result):
result.append(root)
if tree[root][3]:
result = postorder(tree, tree[root][3], result)
if tree[root][2]:
result = postorder(tree, tree[root][2], result)
return result
def solution(nodeinfo):
for i in range(len(nodeinfo)):
nodeinfo[i].append(i + 1)
tree_dict = {}
nodeinfo = sorted(nodeinfo, key=lambda x:(-x[1], x[0]))
for x, y, node in nodeinfo:
tree_dict[node] = [x, y, None, None]
idx = nodeinfo[0][2]
while True:
if x < tree_dict[idx][0]:
if tree_dict[idx][2] == None:
tree_dict[idx][2] = node
break
idx = tree_dict[idx][2]
elif x > tree_dict[idx][0]:
if tree_dict[idx][3] == None:
tree_dict[idx][3] = node
break
idx = tree_dict[idx][3]
else:
break
answer_pre = preorder(tree_dict, nodeinfo[0][2], [])
answer_post = postorder(tree_dict, nodeinfo[0][2], [])
return [answer_pre, answer_post[-1::-1]]